我有两个问题:
要从 PDO 准备语句中受益,我应该首先使用 PDO 对象准备语句:
$statement = $pdo->prepare($query, $bindings);
然后将这个 $statement 存储在 $_SESSION 中并重用这个语句,或者下次我想要执行相同的查询(使用不同的绑定值)时是否应该再次执行相同的操作(PDO::prepare)?
- 在创建 PDO 对象时使用 PDO::ATTR_PERSISTENT 时将 PDO 对象存储在 $_SESSION 中是否有用?
您不应将 PDO 对象存储在会话中。
使用 PDO 对象的最佳(也是唯一正确)方法是在对服务器的每个请求时创建它们。
准备好的查询的好处有两种方式:
在会话中存储 PDO 资源时,随着来自不同客户端的请求进入,将建立与数据库的打开连接。PDO进行连接池,试图将与数据库的连接保持在最低限度,但仍然有一些连接打开速度。通过将 pdo 连接存储在会话中,该机制被终止。并且性能会受到影响。
实际上'您不能序列化或反序列化 PDOStatement 实例'(引用实际的异常消息)。这里是完整的消息:
PHP Fatal error: Uncaught exception 'PDOException' with message 'You cannot serialize or unserialize PDOStatement instances' in [no active file]:0
Stack trace:
#0 [internal function]: PDOStatement->__sleep()
#1 {main}
thrown in [no active file] on line 0
至于为什么 - 这里已经回答了。