簡體   English   中英

動態選擇值

[英]Dynamic select value

例:

$user_input = $_POST['input'];
'SELECT '.$user_input.' FROM table_name'

因此,它基於安全(此示例顯然不安全)值選擇數據庫中的列。 這是實用/允許的代碼嗎?

在SQL中,您只需將string發送到DBMS(如MySQL)。 因此,您可以構建所需的任何string並將其提交給DBMS。

您只需確保生成的SQL查詢有效。 這意味着例如列存在並且不出現無效符號。

就此而言,此代碼有效,假設$user_input必須是有效的列名,這意味着它必須存在且不得包含任何特殊字符,保留字等(除非它們被轉義)。

但是,正如您所說,此代碼並不安全,但只要您計划安全地構建查詢並使用PDO或MySQLi(沒有棄用的mysql_*函數......),您應該沒問題。 如果你需要一個不使用棄用函數的例子(包括mysql_real_escape_string ,也被棄用),我將提供一個。

我知道你說你知道這段代碼不安全,但如果你好奇的話,這是另一個例子。 正如在評論和這個問題中討論的那樣,這個輸入:

$user_input = '; DELETE FROM table_name ; *';
'SELECT '.$user_input.' FROM table_name'

將刪除表table_name的全部內容。 即使此代碼引發語法錯誤,MySQL仍將繼續執行它,從而有效地截斷table_name

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM