2009-12-10 45 views
5

我一直在寻找这个答案,但没有找到任何地方。是调用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 */ 
} 

回答

4

MySQL query cache。但一般而言,您应该保留准备好的语句的标识符并重新使用它。到PDO::prepare()(即使使用相同的SQL查询)

4

两个后续的调用会返回两个不同PDOStatement(或手柄),以避免碰撞,尤其是你可以向它以前和当前绑定之间。无论如何,使用prepare()创建PDO的成本很低。你可能想要缓存的是从相同的SQL查询返回的结果,无论是原始的还是由prepare()构建的,这是你的DBMS(例如MySQL)的一个特性,而不是PHP。

1

这取决于您的数据库驱动程序。使用MySQL,PDO默认会创建一个本地准备好的语句。如果你想使用实际的查询缓存,你可以禁用它。

如果你绝对必须重复执行相同的查询,那么是的,你会想要保持这个句柄。如果你使用模拟的准备好的语句,那么它根本没有任何区别。