我有两个问题:
要从PDO预处理语句中受益,我是否应首先使用PDO对象准备语句:
$ statement = $ pdo-> prepare($ query,$ bindings);
然后将这个$语句存储在$ _SESSION中并重用此语句,或者下次我想要执行相同的查询(具有不同的绑定值)时,我应该再次执行相同的操作(PDO :: prepare)吗? / p>
答案 0 :(得分:8)
您不应将PDO对象存储在会话中。
使用PDO对象的最佳(也是唯一正确的)方法是在每次向服务器发出请求时创建它们。
准备好的查询的好处是两种方式:
在会话中存储PDO资源时,随着来自不同客户端的请求进入,将会建立与数据库的开放连接.PDO执行连接池,尝试保持与数据库到最小,但仍然有某些连接打开以提高速度。通过在会话中存储pdo连接,该机制被终止。而且表现会受到影响。
答案 1 :(得分:1)
实际上'您无法序列化或反序列化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
至于为什么 - 它已经回答了here。