Кэширование PHP PDO



Я искал ответ на этот вопрос, но нигде его не нашел. Являются ли вызовы PDO::prepare() кэшированными, или я должен кэшировать результат сам, т. е. если я делаю следующее

function foo () {
  $handle = PDO::prepare(...);
  /* do stuff with the handle */
}

Будет ли оператор prepare() кэшироваться PDO, чтобы быстро получить второй, третий и т. д. времена? Или лучше сделать это самому, например

function foo() {
  static $handle = null;
  if (!$handle) {
    $handle = PDO::prepare(...);
  }
  /* do stuff with the handle */
}
160   4  

4 ответов:

Существует кэш запросов MySQL . Но в целом вы должны обязательно сохранить идентификатор для подготовленного оператора и повторно использовать его.

Два последующих вызова PDO::prepare() (даже с одним и тем же SQL-запросом) должны возвращать два разных PDOStatement (или дескриптора), чтобы избежать конфликтов, особенно между предыдущими и текущими привязками, которые вы можете применить к нему. Стоимость создания PDOStatement с prepare() в любом случае невелика. То, что вы можете кэшировать, - это результаты, возвращенные из того же SQL-запроса, либо необработанные, либо построенные prepare (), и это особенность вашей СУБД (например, MySQL), а не PHP.

Это зависит от драйвера базы данных. С MySQL PDO создаст собственный подготовленный оператор по умолчанию. Вы можете отключить его, если хотите использовать реальный кэш запросов.

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

Некоторое время назад я попробовал сделать это CPDO и его можно использовать в качестве стандартного PDO

    Ничего не найдено.

Добавить ответ:
Отменить.