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 に答える