有人可以教我如何清理查询吗?我应该清理$ 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'");
答案 0 :(得分:2)
像这样使用PDO和参数绑定:
$sql = "INSERT INTO table (field) VALUES (?)";
$sth = $dbh->prepare($sql);
$sth->execute(array($value));
答案 1 :(得分:1)
如果您想继续使用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'");
注意:如Overview of the mysqli extension (引用)中所述:
什么是PHP的MySQL扩展?
这是原始扩展名 旨在让您开发PHP 与a交互的应用程序 MySQL数据库。
mysql扩展 提供了一个程序界面,并且是 仅适用于MySQL 版本低于4.1.3。
这个 扩展可以与版本一起使用 MySQL 4.1.3或更新版本,但不是全部版本 最新的MySQL服务器功能将 可用。注意:如果您使用的是MySQL 4.1.3或更高版本,则强烈要求 建议你使用 mysqli 扩展名。
另一种解决方案是停止使用mysql_*
家庭功能,并使用准备语句切换到eiter mysqli或PDO,这是新功能之一 mysql_*
不支持:
有了这些,您将不得不逃避您的数据:它将在绑定其值时自动完成。
答案 2 :(得分:0)
“Sanitizing”不一定与“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) . "'");
答案 3 :(得分:0)
我建议使用preg_match语句来限制字符类型。我还建议使用PHP PDO和准备好的SQL语句。我在手机上或者我会发布链接。
答案 4 :(得分:0)
使用像PDO这样的现代数据库功能,并使用参数化查询。