我正在尝试使用mysqli连接传递会话以在网站上进行多次查询,但是当我尝试进行查询时,它会输出警告“无法获取mysqli”
$_SESSION['db']=new mysqli($host,$username,$password,$db);
通过会话传递mysqli连接引用是不可能的?是否有不同的使用方法?
答案 0 :(得分:16)
是的,这显然是不可能的。
请参阅突出显示警告中提到的PHP Documentation here:“某些类型的数据无法序列化,因此存储在会话中。它包括资源变量或带有循环引用的对象(即传递对自身的引用的对象)到另一个对象)。“
MySQL连接就是这样一种资源。
您必须在每次页面运行时重新连接。
如果您可以通过mysql_pconnect()依赖连接池,这并不像听起来那么糟糕,但首先会在this article中看到有关mysql_pconnect()的更多背景信息。
答案 1 :(得分:2)
数据库连接是资源,无法存储在会话中。您必须在每个页面中重建连接,或使用persistent connection(PHP 5.3+)。
答案 2 :(得分:1)
是的 - 你无法通过会话传递它。句柄特定于请求。您可以将它放在像memcache这样的共享资源中,并在需要时获取句柄。
但是,如果您使用连接池,在需要时抓取新句柄(并在完成时关闭它)不会造成很大的性能损失。
总是取决于你的需求,但是,我要么: