我一直在寻找答案,但没有在任何地方找到它.是否缓存了对PDO :: prepare()的调用,或者我应该自己缓存结果,即如果我执行以下操作
function foo () {
  $handle = PDO::prepare(...);
  /* do stuff with the handle */
}
是否会通过PDO缓存prepare()语句,以便快速检索第二次,第三次等等?或者自己做得更好,例如
function foo() {
  static $handle = null;
  if (!$handle) {
    $handle = PDO::prepare(...);
  }
  /* do stuff with the handle */
}
有MySQL 查询缓存。但总的来说,您绝对应该保留准备好的语句的标识符并重新使用它。
查询缓存在 MySQL 8.0 版中消失了,请参阅
https://dba.stackexchange.com/questions/217577/why-mysql-remove-query-cache-in-8-0-version
https://mysqlserverteam.com/mysql-8-0-retireing-support-for-the-query-cache/
对PDO::prepare()(即使使用相同的 SQL 查询)的两次后续调用应返回两个不同的PDOStatement(或句柄)以避免冲突,尤其是在您可能对其应用的先前和当前绑定之间。prepare()无论如何,创建 PDOStatement 的成本很低。您可能想要缓存的是从相同 SQL 查询返回的结果,无论是原始的还是由 prepare() 构建的,这是您的 DBMS(例如 MySQL)的功能,而不是 PHP。
| 归档时间: | 
 | 
| 查看次数: | 10969 次 | 
| 最近记录: |