如何清理MySQL的字符串

时间:2013-04-21 18:02:30

标签: php mysql pdo

到目前为止我已经使用了mysql_real_escape_string,但似乎它不适用于GoDaddy Hostings。我该如何清理数据库的字符串?我找到了一个PDO ::引用,但手册说

“如果您使用此函数构建SQL语句,强烈建议您使用PDO :: prepare()来准备带有绑定参数的SQL语句,而不是使用PDO :: quote()将用户输入插入到SQL中带有绑定参数的预处理语句不仅更易于移植,更方便,不受SQL注入的影响,但执行速度通常比内插查询快得多,因为服务器端和客户端都可以缓存查询的编译形式。“ / p>

这是否意味着prepare + bind_params正在做同样的事情? 抱歉我的英文。

1 个答案:

答案 0 :(得分:1)

不幸的是,PHP手册通常不清楚,错误或欺骗。

带有绑定参数的预处理语句

  • 更便携(不是真的)
  • 更方便(这是唯一真实的陈述),
  • 免于SQL注入(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上做出的一些解释