为什么mysqli_query()会破坏? [mysqli_query():无法获取mysqli]

时间:2016-05-11 15:18:28

标签: php mysql debugging mysqli

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()会失败?

编辑:我从未关闭任何数据库连接。所以不应该关闭数据库连接

1 个答案:

答案 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

您必须找到代码关闭连接并修复它的位置。