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