php – PDO:在循环中调用prepare()的成本?
发布时间:2020-12-13 17:17:55 所属栏目:PHP教程 来源:网络整理
导读:我正在为我的网站编写一个数据库类,其函数包括fetchOne,fetchAll,它们准备,执行(绑定),并且一次性获取查询,所以我不必每次都单独调用这些函数.我网站上的一些cron作业在循环内执行数千甚至数百万个查询. 使用我的类会导致语句在循环的每次迭代中重新准备,还
我正在为我的网站编写一个数据库类,其函数包括fetchOne,fetchAll,它们准备,执行(绑定),并且一次性获取查询,所以我不必每次都单独调用这些函数.我网站上的一些cron作业在循环内执行数千甚至数百万个查询.
使用我的类会导致语句在循环的每次迭代中重新准备,还是PDO“记住”查询已经准备好了?这会对性能产生重大影响吗?如果是这样,解决方案就是提供一个传递数据库实例的函数,并执行类似$db-> getDb() – > prepare($query);循环之外?或者有更好的解决方案吗? 功能示例: public function fetchOne($query,$params = array(),$fetchMode = PDO::FETCH_ASSOC) { $stmt = self::prepareExecute($query,$params); $result = $stmt->fetch($fetchMode); if (count($result) < 1) $result = FALSE; $stmt->closeCursor(); unset($stmt); return($result); } 解决方法
你不希望多次“重新准备”同一个查询.这是准备声明的目的.你准备一次,绑定变量,然后你只需切换变量的值,然后重新执行循环的每次迭代.
http://www.php.net/manual/en/pdostatement.bindparam.php 这样做会大大提高你的表现. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |