PDO对象可以存储在会话中吗?

Vir*_*721 8 php session pdo

我有两个问题:

  • 要从PDO预处理语句中受益,我应该首先使用PDO对象准备语句:

    $ statement = $ pdo-> prepare($ query,$ bindings);

然后将这个$语句存储在$ _SESSION中并重用此语句,或者下次我想要执行相同的查询(具有不同的绑定值)时,我是否应该再次执行相同的操作(PDO :: prepare)?

  • 在创建PDO对象时使用PDO :: ATTR_PERSISTENT时,将PDO对象存储在$ _SESSION中是否有用?

Jvd*_*erg 8

您不应将PDO对象存储在会话中.

使用PDO对象的最佳(也是唯一正确的)方法是在每次向服务器发出请求时创建它们.

准备好的查询的好处是2种方式:

  1. 当多次执行相同的查询时,存在速度优势
  2. 有参数绑定的可能性,以防止SQL注入.

在会话中存储PDO资源时,随着来自不同客户端的请求进入,将建立与数据库的开放连接.PDO执行连接池,尝试将与数据库的连接保持在最低限度,但仍然有一些连接开放的速度.通过在会话中存储pdo连接,该机制被终止.而且表现会受到影响.

  • +1.通常,包含_resources_的类不应存储在会话中,因为它们不是_serialisable_.更多关于[这里](http://php.net/manual/en/intro.session.php). (4认同)