[英]PHP/MySQLi - Fatal error: Call to a member function mysqli_query() on a non-object
[英]CodeIgniter Random PHP Fatal error: Call to a member function … on a non-object in … mysqli_driver.php
我发现有很多贴子与此相似,但都不相同。 我有一个使用率很高的CodeIgniter应用程序,每天可能有几十个完全随机的致命错误记录到错误日志中。
PHP致命错误:在/system/database/drivers/mysqli/mysqli_driver.php中的非对象上调用成员函数real_escape_string()
要么
PHP致命错误:在/system/database/drivers/mysqli/mysqli_driver.php中的非对象上调用成员函数query()
成员函数是随机的。 Row(),Query(),real_escape_string(),num_rows()等。
我在mysqli_driver.php中添加了一个日志函数,该函数会在接收到非对象时转储堆栈跟踪:
if(!is_object($this->conn_id))
// Dump stack
这告诉我错误是在应用程序中的随机位置发生的,因此我假设问题不在我的代码中。 剩下的就是我的服务器配置。 我找不到任何吸烟枪,也无法重现该错误。
我在这里抓稻草。 谁能提供关于我可以采取哪些其他措施的想法?
更新:这是我使用的配置。 主数据库连接:
$db['default'] = array(
'dsn' => '',
'hostname' => 'localhost',
'username' => 'cfMaster',
'password' => 'somemasterpw',
'database' => 'cfMaster',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => TRUE,
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => FALSE
);
连接到备用数据库时:
// $userDb array contains all of the connection details.
$firmDb = array( "firm_id" => $userDb[0]->firm_id,
"hostname" => $userDb[0]->hostname,
"username" => $userDb[0]->username,
"password" => $userDb[0]->password,
"database" => $userDb[0]->database,
"dbdriver" => "mysqli",
"pconnect" => FALSE );
$this->db = $this->load->database($firmDb, TRUE, TRUE);
每小时约35K个连接。 每天约20次失败。 实际上,我所有的数据库连接在99.99%的时间内都可以正常工作。 发现0.01%的失败是我的问题。
“非对象”表示变量($ db)不引用对象。 您是否将其分配给数据库类(例如,$ db = new databaseClass();或您正在使用的类的任何名称)?
更换
$var = &new class(); with $var = new class();
它会工作
尝试在您的方法上加载数据库并尝试
function __construct(){
parent::__construct();
$this->load->database();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.