PDO的查询与执行

他们俩都做同一件事,只是做事不同吗?


除了使用prepare之间还有什么区别


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

$result = $sth->fetchAll();


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

$sth->execute();

$result = $sth->fetchAll();


猛跑小猪
浏览 417回答 3
3回答

慕后森

query 运行标准SQL语句,并要求您正确转义所有数据,以避免SQL注入和其他问题。execute运行一个准备好的语句,该语句使您可以绑定参数,以避免需要转义或引用参数。execute如果您多次重复查询,效果也会更好。准备语句的示例:$sth = $dbh->prepare('SELECT name, colour, calories FROM fruit&nbsp; &nbsp; 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//&nbsp; &nbsp; 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);尽管在小规模范围内并不引人注目,但它们通常会为您带来性能改进。阅读更多有关准备好的语句(MySQL版本)的信息。
打开App,查看更多内容
随时随地看视频慕课网APP