为什么我的代码出现PHP致命错误?

Bri*_*ian 2 php mysqli

我一直在捣乱我的大脑几个小时,试图弄清楚为什么我的代码给了我错误:

PHP Fatal error:  Call to a member function close() on a non-object in /var/www/Garage/ajaxFunctions/ServiceReplication.php on line 24
Run Code Online (Sandbox Code Playgroud)

这是我的代码.它是我的应用程序中AJAX调用的后端:

<?php
    /*
        Description:
        Parameters:
        Return:
    */
    include_once('../includes/config.inc.php');
    include_once('../includes/dbConnection.php');

    // $newTargetID = (isset($_GET['newTargetID']) && $_GET['newTargetID'] != '') ? strip_tags($_GET['newTargetID']) : null;
    // $service = (isset($_GET['service']) && $_GET['service'] != '') ? strip_tags($_GET['service']) : null;

    $newTargetID = "12988";
    $service = "16468";

    $returnValue = "0";

    if($newTargetID != null && $service != null){
        $ServiceReplicationQuery = "call ServiceReplication(" . $newTargetID . "," . $service . ")";
        error_log("ServiceReplicationQuery: " . $ServiceReplicationQuery);
        if($result = $dbConnection->query($ServiceReplicationQuery)){
            error_log("Successfully replicated service " . $service . " to target " . $newTargetID . ".");
            $returnValue = "1";
            $result->close();
        }
        else{
            error_log("Failure replicating service " . $service . " to target " . $newTargetID . ".");
        }
    }
    else{
        error_log("Failure replicating service " . $service . " to target " . $newTargetID . ".");
    }

    echo $returnValue;
?>
Run Code Online (Sandbox Code Playgroud)

请注意,dbConnection.php包含有一个有效且有效的mysqli数据库连接,并且我有其他几乎完全相同的AJAX后端,它们完美地工作,唯一的区别是我使用这段代码存储过程.

我可以把我的查询的error_log回显,放在MySQL Workbench中,它工作正常.事实上,即使我收到此错误,数据库也会更新.我只是得到这个错误而没有得到我需要的返回值,即"1".

pho*_*ops 5

您错误地设置变量而不是在if语句中进行比较:

if ($result = $dbConnection->query($ServiceReplicationQuery)) {
Run Code Online (Sandbox Code Playgroud)

这总是评估为真.您得到的错误是因为您尝试在$ result上调用方法close(),这在$ result不是对象时是致命的.

将代码更新为此代码而不是$result->close():

$dbConnection->close();
Run Code Online (Sandbox Code Playgroud)

或者如果你真的想在$ result上调用close:

$result = $dbConnection->query($ServiceReplicationQuery)
if ($result) {
Run Code Online (Sandbox Code Playgroud)

或这个:

$result = $dbConnection->query($ServiceReplicationQuery)
if (is_object($result)) {
Run Code Online (Sandbox Code Playgroud)

取决于你想要完成什么更合适.