2

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

“如果您使用此函数构建 SQL 语句,强烈建议您使用 PDO::prepare() 来准备带有绑定参数的 SQL 语句,而不是使用 PDO::quote() 将用户输入插入到 SQL 语句中。准备好的带有绑定参数的语句不仅更便携、更方便、不受 SQL 注入的影响,而且执行起来通常比插值查询快得多,因为服务器端和客户端都可以缓存查询的编译形式。”

这是否意味着 prepare + bind_params 正在做同样的事情?对不起我的英语不好。

4

1 回答 1

1

不幸的是,PHP 手册经常不清楚、错误或具有欺骗性。

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

  • 更便携(不正确)
  • 更方便(这是唯一正确的说法),
  • 免疫 SQL 注入(quote()也使事物免疫),
  • 通常执行速度要快得多(只是谎言)

因此,您可以使用任何一种方式,但准备好的语句让您拥有更短的代码:

$id   = $pdo->quote($id);
$name = $pdo->quote($name);
$stm  = $pdo->query("SELECT * FROM t WHERE id=$id AND name=$name");

对比

$stm  = $pdo->query("SELECT * FROM t WHERE id=? AND name=?");
$stm->execute(array($id,$name));

虽然这不是唯一的原因:请参阅我对为什么应该使用准备好的语句所做的一些解释

于 2013-04-21T18:48:04.737 回答