无法在php中的会话中传递mysqli连接

时间:2010-01-24 00:46:18

标签: php session mysqli

我正在尝试使用mysqli连接传递会话以在网站上进行多次查询,但是当我尝试进行查询时,它会输出警告“无法获取mysqli”

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

通过会话传递mysqli连接引用是不可能的?是否有不同的使用方法?

3 个答案:

答案 0 :(得分:16)

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

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

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

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

是的 - 你无法通过会话传递它。句柄特定于请求。您可以将它放在像memcache这样的共享资源中,并在需要时获取句柄。

但是,如果您使用连接池,在需要时抓取新句柄(并在完成时关闭它)不会造成很大的性能损失。

总是取决于你的需求,但是,我要么:

  • 在您需要时/按请求创建新句柄/(打开连接池)
  • 将dbhandle粘贴在memcache