我正在为我的网站编写一个数据库类,其中包含准备、执行(+bind)和获取查询的函数,例如fetchOnefetchAll,这样我就不必每次都单独调用这些函数。我的站点上的一些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
与其他方法相比,这样做将大大提高性能。

10-07 19:38
查看更多