[英]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.