PDO的查询与执行?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

他们都做同样的事情,只是不同?

有没有除了使用任何差别prepare之间

$sth = $db->query("SELECT * FROM table");
$result = $sth->fetchAll();

$sth = $db->prepare("SELECT * FROM table");
$sth->execute();
$result = $sth->fetchAll();

?

提问于
用户回答回答于

query 运行标准的SQL语句,并要求你正确地转义所有数据以避免SQL注入和其他问题。

execute运行一个准备好的语句,允许你绑定参数以避免需要转义或引用参数。execute如果你多次重复查询,性能也会更好。准备报表的示例:

$sth = $dbh->prepare('SELECT name, colour, calories FROM fruit
    WHERE calories < :calories AND colour = :colour');
$sth->bindParam(':calories', $calories);
$sth->bindParam(':colour', $colour);
$sth->execute();
// $calories or $color do not need to be escaped or quoted since the
//    data is separated from the query

最佳做法是坚持准备好的声明并execute提高安全性

用户回答回答于

不,他们不一样。除了它提供的客户端转义之外,准备好的语句在服务器端编译一次,然后可以在每次执行时传递不同的参数。这意味着你可以这样做:

$sth = $db->prepare("SELECT * FROM table WHERE foo = ?");
$sth->execute(array(1));
$results = $sth->fetchAll(PDO::FETCH_ASSOC);

$sth->execute(array(2));
$results = $sth->fetchAll(PDO::FETCH_ASSOC);

扫码关注云+社区