为了账号安全,请及时绑定邮箱和手机立即绑定

PDO的查询与执行

PDO的查询与执行

PHP
猛跑小猪 2019-11-25 15:42:36
他们俩都做同一件事,只是做事不同吗?除了使用prepare之间还有什么区别$sth = $db->query("SELECT * FROM table");$result = $sth->fetchAll();和$sth = $db->prepare("SELECT * FROM table");$sth->execute();$result = $sth->fetchAll();?
查看完整描述

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提高安全性。


查看完整回答
反对 回复 2019-11-25
?
临摹微笑

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版本)的信息。


查看完整回答
反对 回复 2019-11-25
  • 3 回答
  • 0 关注
  • 416 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信