Mysqli_query包含在我的代码中的以下封装函数中:
function QueryDatabase($query){
error_log("Database Line 134: " . memory_get_usage(true));
$QueryResult = NULL;
switch($this->RDBType){
case 'MySQL':
error_log('MySQLi link IS Valid?:'); error_log(boolval($this->link));
error_log(get_class($this->link));
error_log("Database Line 139: " . memory_get_usage(true));
error_log("Performing Query: '" . $query . "'");
$QueryResult = mysqli_query($this->link, $query);
error_log("Result: " . gettype($QueryResult));
error_log("Database Line 141: " . memory_get_usage(true));
break;
case 'PostGreSQL':
default:
break;
}
error_log("Database Line 147: " . memory_get_usage(true));
return $QueryResult;
}
PHP错误日志如下所示:
[11-May-2016 17:04:00 Europe / Berlin] Database Line 134:262144
[2016年5月11日17:04:00欧洲/柏林] MySQLi链接是否有效?:
[2016年5月11日17:04:00欧洲/柏林] 1
[2016年5月11日17:04:00欧洲/柏林] mysqli
[11-May-2016 17:04:00 Europe / Berlin] Database Lines 139:262144
[11-May-2016 17:04:00 Europe / Berlin]执行查询:' SELECT * FROM 扫描 INNER JOIN landlot 在scans.scansId = landlot.scansId上 INNER JOIN区 在scans.scansid = district.scansId上 INNER JOIN街道名称 在scans.scansid = streetname.scansId WHERE Lot = 1;'
[11-May-2016 17:04:00 Europe / Berlin] PHP警告:mysqli_query(): 无法获取mysqli 我:第145行的\ xampp \ htdocs \ GLS_DBSearchProject \ Database.php
[11-May-2016 17:04:00 Europe / Berlin]结果:NULL
[11-May-2016 17:04:00 Europe / Berlin] Database Line 141:262144
[11-May-2016 17:04:00 Europe / Berlin] Database Line 147:262144
[2016年5月11日17:04:00欧洲/柏林] PHP注意:试图获得 非对象的属性 我:第86行的\ xampp \ htdocs \ GLS_DBSearchProject \ DatabaseSearch.php
[11-May-2016 17:04:00 Europe / Berlin] Database Line 134:262144
[2016年5月11日17:04:00欧洲/柏林] MySQLi链接是否有效?:
[2016年5月11日17:04:00欧洲/柏林] 1
[2016年5月11日17:04:00欧洲/柏林] mysqli
[11-May-2016 17:04:00 Europe / Berlin] Database Lines 139:262144
[11-May-2016 17:04:00 Europe / Berlin]执行查询:' SELECT * FROM 扫描 INNER JOIN landlot 在scans.scansId = landlot.scansId上 INNER JOIN区 在scans.scansid = district.scansId上 INNER JOIN街道名称 on scans.scansid = streetname.scansId WHERE Lot = 1 LIMIT 10 OFFSET 0;'
[11-May-2016 17:04:00 Europe / Berlin] PHP警告:mysqli_query(): 无法获取mysqli 我:第145行的\ xampp \ htdocs \ GLS_DBSearchProject \ Database.php
[11-May-2016 17:04:00 Europe / Berlin]结果:NULL
[11-May-2016 17:04:00 Europe / Berlin] Database Line 141:262144
[11-May-2016 17:04:00 Europe / Berlin] Database Line 147:262144
[11-May-2016 17:04:00 Europe / Berlin] PHP致命错误:致电a 成员函数fetch_assoc()在非对象中 I:\ xampp \ htdocs \ GLS_DBSearchProject \ DatabaseSearch.php第126行
我真的很困惑为什么mysqli_query无法返回结果。我在整个项目中多次使用过QueryDatabase()函数,直到现在才遇到问题。我有一个PHPUnit测试,它显示我的QueryDatabase()函数似乎正常工作,所有其他符号指向mysqli_query()函数调用期间发生的问题。
我已经进行了大量检查,以确保数据库链接($ this->链接中包含的mysqli对象)有效并指向相应的数据库。我还检查过,确保我的查询按预期工作,方法是手动复制并粘贴到mysql查询浏览器中。
如果我的查询有效并且我的数据库链接有效,为什么mysqli_query()会失败?
编辑:我从未关闭任何数据库连接。所以不应该关闭数据库连接
答案 0 :(得分:1)
您的日志没有任何问题。
实时mysqli实例并不意味着有一个实时的mysql连接。与PDO不同,您可以关闭mysql连接,但有一个mysqli对象可以。所以错误信息说:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$conn = new mysqli('localhost','root','','test');
$conn->query("SELECT 1");
$conn->close();
var_dump(get_class($conn));
$conn->query("SELECT 1");
会给你预期的输出:
string(6)“mysqli”
警告:mysqli :: query():无法在第10行的mysqli.php中获取mysqli
您必须找到代码关闭连接并修复它的位置。