2

我有以下简单的 php 代码片段,它会在调用时从数据库中删除相关文章。结果被传递给一个 javascript 函数,该函数将通过 AJAX 更新页面。false如果查询失败,我想返回字符串,如下所示。

if($cmd=="deleterec"){
    $deleteQuery = "DELETE FROM AUCTIONS1 WHERE ARTICLE_NO = ?";
    if ($delRecord = $con->prepare($deleteQuery)) {
        $delRecord->bind_param("s", $pk);
        $delRecord->execute();
        $delRecord->close();
        echo "true";
    } else {
        echo "false";
    }
}

我想知道我错过了什么以及检查查询是否成功的正确方法。

4

5 回答 5

2

您需要使用mysqli->affected_rows()来检查查询是否成功(或者您可以使用mysqli_stmt->execute()的结果值)。

以您的示例为例,只针对上述内容进行任何修改:

if($cmd=="deleterec") {
    $deleteQuery = "DELETE FROM AUCTIONS1 WHERE ARTICLE_NO = ?";
    
    if ($delRecord = $con->prepare($deleteQuery)) {
        $delRecord->bind_param("s", $pk);
        $delRecord->execute();
    
    
        if ($delRecord->affected_rows > 0) {
            echo "true";
        } else {
            echo "false";
        }

        $delRecord->close();
    }
}
于 2009-03-08T21:20:29.410 回答
2

您目前只检查 SQL 语句是否正确准备,而不是检查它是否实际删除了记录。

尝试:

...
echo ($delRecord->affected_rows > 0) ? 'true' : 'false';
$delRecord->close();

这并不能解决您是否正确检查了 Javascript 代码中的结果字符串 - 如果这是一个问题,我们将需要更多信息。

于 2009-03-08T21:24:03.050 回答
1

使用 的返回值mysqli_stmt->execute()来查看查询是否执行成功。

于 2009-03-08T21:24:21.710 回答
-1
if($cmd=="deleterec"){
    $deleteQuery = "DELETE FROM AUCTIONS1 WHERE ARTICLE_NO = ?";
    $delRecord = $con->prepare($deleteQuery);
    if ( $delRecord === false ) {
        echo "false";
    }

    $delRecord->bind_param("s", $pk);
    if ( $delRecord->execute() ) {
        echo "true";
    } else {
        echo "false";
    }
    $delRecord->close();
}

prepare()可以省略检查,因为查询已修复并且应该可以正常工作(除非服务器端出现错误)。execute()如果查询执行成功,则返回 true。使用affected_rows()可能会产生误导,因为可能没有要删除的项目,因此应该affected_rows()返回0。尽管如此,查询已成功执行。

于 2009-03-08T23:12:19.827 回答
-1
function run_query($query,$conn,$dbname){
   $conn->select_db($dbname);
   if($result = $conn->query($query)){
     return $result; 
   }
   else{
     echo 'error ';
     exit();
   }

}

run_query() 接受三个参数,查询、连接和数据库。如果查询不成功将通过错误,否则将返回结果对象。

于 2021-05-04T06:11:49.697 回答