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

为什么我的代码会出现PHP致命错误?,php,mysqli,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 这是我的密码。它是我的应用程序中AJAX调用的后端: <?php /* Description: Parameters

我绞尽脑汁想了几个小时,想弄明白为什么我的代码会给我这个错误:

PHP Fatal error:  Call to a member function close() on a non-object in /var/www/Garage/ajaxFunctions/ServiceReplication.php on line 24
这是我的密码。它是我的应用程序中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;
?>

请注意,dbConnection.php include确实有一个有效且有效的mysqli db连接,我还有其他与此几乎相同的AJAX后端,它们工作得非常好,唯一的区别是我使用的是一个存储过程和这段代码


我可以获取查询的错误日志回音,将其放在MySQL Workbench中,它可以正常工作。事实上,即使我得到这个错误,数据库也会更新。我只是得到了这个错误,没有得到我需要的返回值,即“1”。

您错误地设置了一个变量,而不是在if语句中比较它:

if ($result = $dbConnection->query($ServiceReplicationQuery)) {
这将始终评估为真。您得到的错误是因为您试图对$result调用方法close(),当$result不是对象时,这是致命的

将代码更新到此位置,而不是
$result->close()

或者,如果您真的想调用$result关闭:

$result = $dbConnection->query($ServiceReplicationQuery)
if ($result) {
或者这个:

$result = $dbConnection->query($ServiceReplicationQuery)
if (is_object($result)) {

取决于您试图完成的任务中更合适的内容。

$dbConnection->close()
。您关闭的是连接,而不是结果。$result不是布尔值或数据数组吗?我认为您需要在$dbConnection上使用close()$dbConnection->close();您的查询没有返回数据,因此您的if导致了致命错误,因为您无法在空(读:非对象)
$result
@johncode上调用
close()
。我在PHP.net上发现了这个问题,这里的
$result
可能并不总是计算为true-如果查询失败,那么它将被设置为
false
。但是。。。我以前使用过这个方法很多次,而且它很有效。@andrewsi:因为我们不知道query()做什么或返回什么,所以这都是推测,因此我根据代码的工作方式提供了3种可能的更新:)@Brian:那么请检查您的查询。它没有返回数据,因此失败。如果查询返回某些内容,则不会出现错误。如果仍要捕获php发出的错误,请使用函数
$result = $dbConnection->query($ServiceReplicationQuery)
if (is_object($result)) {