【问题标题】:Can't pass mysqli connection in session in php无法在 php 的会话中传递 mysqli 连接
【发布时间】:2011-01-08 16:26:03
【问题描述】:

我正在尝试通过 mysqli 连接为站点上的多个查询传递会话,但是当我尝试执行查询时,它会输出警告“无法获取 mysqli”

$_SESSION['db']=new mysqli($host,$username,$password,$db);

是否不可能通过会话传递 mysqli 连接引用?有其他方法可以使用吗?

【问题讨论】:

    标签: php session mysqli


    【解决方案1】:

    是的,这显然是不可能的。

    请参阅PHP Documentation here 在突出显示的警告中提到:“某些类型的数据无法序列化,因此存储在会话中。它包括资源变量或具有循环引用的对象(即对象将自身的引用传递给另一个对象)。”

    MySQL 连接就是这样一种资源。

    您必须在每个页面运行时重新连接。

    如果您可以通过mysql_pconnect() 依赖连接池,这并不像听起来那么糟糕,但首先在this article 中查看有关mysql_pconnect() 的更多背景信息。

    【讨论】:

      【解决方案2】:

      数据库连接是资源,不能存储在会话中。您必须在每个页面中重建连接,或使用persistent connection(PHP 5.3+)。

      【讨论】:

        【解决方案3】:

        是的 - 你不能通过会话传递它。句柄特定于请求。您也许可以将它放在 memcache 之类的共享资源中,并在需要时获取句柄。

        但是,如果您使用连接池,则在需要时获取新句柄(并在完成后关闭它)不会对性能造成很大影响。

        始终取决于您的需求,但是,我愿意:

        • 在需要时/按请求/创建一个新句柄/(打开连接池)
        • 将 dbhandle 粘贴到内存缓存中

        【讨论】:

          猜你喜欢
          • 2023-03-11
          • 2018-01-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多