2009-03-08 3 views
0

私は次の簡単なPHPコードスニペットを持っています。これは、呼び出されるとデータベースから関連記事を削除します。結果はjavacスクリプト関数に渡され、AJAX経由でページが更新されます。クエリが失敗した場合は、以下のように文字列falseを返したいと思います。PHPでSQLクエリをテストする

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"; 
} 
} 

クエリが成功したかどうかを確認する正しい方法と私が見逃していることを知りたいと思います。

編集:回答をもとに

、私の代わりにの準備が、彼の作っ差はtはない$delRecord->execute();にif節を動かしてみました。私はfalseを返すようにページを得ることができません。

以下の解決策は、正しくない場合でもクエリが常に実行され、常に「true」を返すため、機能しません。影響を受ける行メソッドを試してみると、error : Call to undefined method mysqli_stmt::affected_rows()

+0

現時点で明らかに動作していない理由を詳細に説明し、Javascriptコードも表示してください。 – Alnitak

+0

愚かな質問 - $ conは有効な接続ですよね? – jmucchiello

+0

うん、それは確かです。 AlnitakはJavaScriptコードが貼り付けられていますが、ページは決して「false」を返さないので、JavaScriptの問題ではないと思います。 –

答えて

2

mysqli->affected_rows()を使用して、クエリが成功したかどうかを確認する必要があります(またはmysqli_stmt->execute()の結果値を使用できます)。

あなたの例を取ると、何も変更していないが、上記のために:あなたは現在唯一のSQLステートメントが正しく、あなたはそれが実際にレコードを削除するかどうかをチェックしていない準備されているかどうかをチェックしている

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(); 
    } 
} 
+0

おそらく、close()を呼び出した後にaffected_rows()をチェックするのが最善ではありません... – Alnitak

+0

真...もっと慎重に読むべきです。 –

2

試してください:あなたが正しくあなたのJavaScriptコードで結果文字列をチェックしているかどうか対応していません

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

- それが問題だ場合、我々はより多くの情報が必要になります。

+0

あなたは「偽」の終了見積りを忘れました。 –

+0

私は、ありがとう! – Alnitak

2

mysqli_stmt->execute()の戻り値を使用して、クエリが正常に実行されたかどうかを確認します。 (サーバ側のエラーがある場合を除き)

prepare()をチェック
0
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(); 
} 

は、クエリが固定されているため、取り残さすることができ、作業をする必要があります。​​は、クエリが正常に実行された場合はtrueを返します。 affected_rows()を使用すると、削除するアイテムがない可能性がありますので、affected_rows()0を返す可能性がありますので、誤解を招く可能性があります。それにもかかわらず、クエリは正常に実行されました。

関連する問題