【发布时间】:2011-01-08 16:26:03
【问题描述】:
我正在尝试通过 mysqli 连接为站点上的多个查询传递会话,但是当我尝试执行查询时,它会输出警告“无法获取 mysqli”
$_SESSION['db']=new mysqli($host,$username,$password,$db);
是否不可能通过会话传递 mysqli 连接引用?有其他方法可以使用吗?
【问题讨论】:
我正在尝试通过 mysqli 连接为站点上的多个查询传递会话,但是当我尝试执行查询时,它会输出警告“无法获取 mysqli”
$_SESSION['db']=new mysqli($host,$username,$password,$db);
是否不可能通过会话传递 mysqli 连接引用?有其他方法可以使用吗?
【问题讨论】:
是的,这显然是不可能的。
请参阅PHP Documentation here 在突出显示的警告中提到:“某些类型的数据无法序列化,因此存储在会话中。它包括资源变量或具有循环引用的对象(即对象将自身的引用传递给另一个对象)。”
MySQL 连接就是这样一种资源。
您必须在每个页面运行时重新连接。
如果您可以通过mysql_pconnect() 依赖连接池,这并不像听起来那么糟糕,但首先在this article 中查看有关mysql_pconnect() 的更多背景信息。
【讨论】:
数据库连接是资源,不能存储在会话中。您必须在每个页面中重建连接,或使用persistent connection(PHP 5.3+)。
【讨论】:
是的 - 你不能通过会话传递它。句柄特定于请求。您也许可以将它放在 memcache 之类的共享资源中,并在需要时获取句柄。
但是,如果您使用连接池,则在需要时获取新句柄(并在完成后关闭它)不会对性能造成很大影响。
始终取决于您的需求,但是,我愿意:
【讨论】: