我一直在捣乱我的大脑几个小时,试图弄清楚为什么我的代码给了我错误:
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数据库连接,并且我有其他几乎完全相同的AJAX后端工作完美,唯一的区别是我正在使用存储过程一段代码。
我可以将查询的error_log回显,放在MySQL Workbench中,它运行正常。事实上,即使我收到此错误,数据库也会更新。我只是得到了这个错误而没有得到我需要的返回值,这是&#34; 1&#34;。
答案 0 :(得分:5)
您错误地设置变量而不是在if语句中进行比较:
if ($result = $dbConnection->query($ServiceReplicationQuery)) {
这将始终评估为true。您得到的错误是因为您尝试在$ result上调用方法close(),这在$ result不是对象时是致命的。
将代码更新为此代替$result->close()
:
$dbConnection->close();
或者,如果你真的想在$ result上调用close:
$result = $dbConnection->query($ServiceReplicationQuery)
if ($result) {
或者这个:
$result = $dbConnection->query($ServiceReplicationQuery)
if (is_object($result)) {
取决于你想要完成什么更合适。