PHP PDO缓存
问题描述:
我一直在寻找这个答案,但没有找到任何地方。是调用PDO ::准备()缓存,或者我应该缓存结果自己,也就是说,如果我做了以下PHP PDO缓存
function foo() {
$handle = PDO::prepare(...);
/* do stuff with the handle */
}
将准备()语句由PDO被缓存,这样它的快速检索第二,第三次等?或者我自己做得更好,例如
function foo() {
static $handle = null;
if (!$handle) {
$handle = PDO::prepare(...);
}
/* do stuff with the handle */
}
答
两个后续的调用会返回两个不同PDOStatement
(或手柄),以避免碰撞,尤其是你可以向它以前和当前绑定之间。无论如何,使用prepare()
创建PDO的成本很低。你可能想要缓存的是从相同的SQL查询返回的结果,无论是原始的还是由prepare()构建的,这是你的DBMS(例如MySQL)的一个特性,而不是PHP。
答
这取决于您的数据库驱动程序。使用MySQL,PDO默认会创建一个本地准备好的语句。如果你想使用实际的查询缓存,你可以禁用它。
如果你绝对必须重复执行相同的查询,那么是的,你会想要保持这个句柄。如果你使用模拟的准备好的语句,那么它根本没有任何区别。