3 回答
TA贡献1802条经验 获得超5个赞
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提高安全性。
TA贡献1982条经验 获得超2个赞
不,他们不一样。除了在客户端提供转义功能外,准备好的语句在服务器端也会编译一次,然后可以在每次执行时传递不同的参数。这意味着您可以:
$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版本)的信息。
- 3 回答
- 0 关注
- 416 浏览
添加回答
举报