[英]How do i sanitize the query below?
有人可以教我如何清理查詢嗎? 我也應該清理$ first_word嗎?
$question_text = sanitize($_POST['question_text']);
list($first_word) = explode(' ', $question_text);
$qStuff=mysql_query("SELECT c.field_name,t.category_name, d.domain_name FROM category_fields c, taxonomy_category t, taxonomy_domain d WHERE c.category_id = t.category_id AND t.domain_id = d.domain_id AND c.field_name = '$first_word'");
像這樣使用PDO和參數綁定:
$sql = "INSERT INTO table (field) VALUES (?)";
$sth = $dbh->prepare($sql);
$sth->execute(array($value));
如果要繼續使用mysql_*
函數,則必須使用mysql_real_escape_string()
來轉義字符串數據:
$first_word_escaped = mysql_real_escape_string($first_word);
$qStuff=mysql_query("SELECT c.field_name,t.category_name, d.domain_name FROM category_fields c, taxonomy_category t, taxonomy_domain d
WHERE c.category_id = t.category_id
AND t.domain_id = d.domain_id
AND c.field_name = '$first_word_escaped'");
注意:如mysqli擴展概述 (引用)中所述 :
什么是PHP的MySQL擴展?
這是最初的擴展,旨在允許您開發與MySQL數據庫交互的PHP應用程序。
mysql擴展提供了一個過程接口,僅適用於4.1.3之前的MySQL版本。
該擴展可以與MySQL 4.1.3或更高版本一起使用,但並非所有最新的MySQL服務器功能都可用。注意:如果使用的是MySQL 4.1.3或更高版本,則強烈建議您改用mysqli擴展名。
另一種解決方案是停止使用mysql_*
函數,並使用Prepared Statements切換到eiter mysqli或PDO ,這是mysql_*
不支持的新功能之一:
有了它們,您將不得不轉義數據:綁定它們的值時,它將自動完成。
“清除”與“ SQL轉義”不一定相同。 要使用MySQL的SQL轉義值,請在要放入查詢中的值上使用mysql_real_escape_string
:
$first_word = current(explode(' ', $_POST['question_text']));
// sanitize $first_word here if you want to to remove certain things
mysql_query("SELECT … '" . mysql_real_escape_string($first_word) . "'");
我建議使用preg_match語句限制字符類型。 我還建議使用PHP PDO和准備好的SQL語句。 我正在使用手機,否則我會發布鏈接。
使用PDO等現代數據庫功能,並使用參數化查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.