到目前为止我已经使用了mysql_real_escape_string,但似乎它不适用于GoDaddy Hostings。我该如何清理数据库的字符串?我找到了一个PDO ::引用,但手册说
“如果您使用此函数构建SQL语句,强烈建议您使用PDO :: prepare()来准备带有绑定参数的SQL语句,而不是使用PDO :: quote()将用户输入插入到SQL中带有绑定参数的预处理语句不仅更易于移植,更方便,不受SQL注入的影响,但执行速度通常比内插查询快得多,因为服务器端和客户端都可以缓存查询的编译形式。“ / p>
这是否意味着prepare + bind_params正在做同样的事情? 抱歉我的英文。
答案 0 :(得分:1)
不幸的是,PHP手册通常不清楚,错误或欺骗。
带有绑定参数的预处理语句
quote()
也使事情免疫),因此,您可以使用任何一种方式,但预备语句可以让您拥有更短的代码:
$id = $pdo->quote($id);
$name = $pdo->quote($name);
$stm = $pdo->query("SELECT * FROM t WHERE id=$id AND name=$name");
VS
$stm = $pdo->query("SELECT * FROM t WHERE id=? AND name=?");
$stm->execute(array($id,$name));
虽然这不是唯一的原因:请参阅我在Why one should use prepared statements上做出的一些解释