Кэширование 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 */ } 

Solutions Collecting From Web of "Кэширование PHP PDO"

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

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

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

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