PDO: стоимость вызова prepare () в цикле? - PullRequest
4 голосов
/ 07 февраля 2012

Я пишу класс базы данных для моего веб-сайта с такими функциями, как fetchOne, fetchAll, которые подготавливают, выполняют (+ bind) и извлекают запрос все в одном, поэтому мне не нужно отдельно вызывать ихфункционирует каждый раз.Некоторые задания 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);
}

1 Ответ

5 голосов
/ 07 февраля 2012

вы бы не хотели «заново готовить» один и тот же запрос несколько раз. это цель подготовительного заявления. вы готовите его один раз, связываете переменную (и), затем просто переключаете значения переменных и повторно выполняете каждую итерацию цикла.

http://www.php.net/manual/en/pdostatement.bindparam.php

выполнение этих действий значительно повысит вашу производительность по сравнению с альтернативными методами.

...