php
  • mysql
  • 2011-10-31 3 views 0 likes 
    0

    2つのテーブルの行が削除されたが、クエリが最初のクエリを実行してから成功した結果を返すだけで成功した場合、どうすればいいですか?mysql_query with &&

    if (mysql_query("DELETE FROM ex_test_taken WHERE userid1 = '$userid2' AND testid1 = '$tid2'") && ("DELETE FROM ex_answer WHERE name = '$userid2' AND testname = '$tid2'")) { 
    echo "Sucesfull"; 
    } else { 
    echo "Failed"; 
    } 
    

    答えて

    3

    あなたのコードは次のとおりです。だから、基本的にしてみてください... 1つのクエリを

    if (
        mysql_query("DELETE FROM ex_test_taken WHERE userid1 = '$userid2' AND testid1 = '$tid2'") 
        && ("DELETE FROM ex_answer WHERE name = '$userid2' AND testname = '$tid2'") 
        ) 
    

    実行している:

    if (
        mysql_query("DELETE FROM ex_test_taken WHERE userid1 = '$userid2' AND testid1 = '$tid2'") 
        && 
        mysql_query("DELETE FROM ex_answer WHERE name = '$userid2' AND testname = '$tid2'") 
        ) 
    
    3

    ("DELETE FROM ex_answer WHERE name = '$userid2' AND testname = '$tid2'")次のようになります。

    mysql_query("DELETE FROM ex_answer WHERE name = '$userid2' AND testname = '$tid2'") 
    

    平野非空の文字列は常にtrueに評価されます。

    +0

    わかりませんが、どうしましたか? – Wilest

    +2

    彼は、サンプルコードのAND演算子&&の後に、2番目のクエリのためにmysql_queryへの関数呼び出しを追加する必要があることを意味します。 –

    2

    あなたは(そのするmysql_queryを注意してください)DELETE文が実行された場合trueを返します。正しく。 「正しく実行されました」は「実際に行が削除された」と同じではありません。したがって、あなたのクエリが間違っていない限り(悪い構文、テーブル/カラムmysqlは知らない)、これは常にtrueを返します。

    データが変更されたかどうかを知りたい場合は、mysql_affected_rows()を使用してください。

    mysqlに渡すデータには、mysql_real_escape_string()を使用する必要があります。

    <?php 
    
    $success = 
        mysql_query('DELETE FROM ex_test_taken WHERE userid1 = "' . mysql_real_escape_string($userid2) . '" AND testid1 = "' . mysql_real_escape_string($tid2) . '"') 
        && mysql_affected_rows() 
        && mysql_query('DELETE FROM ex_answer WHERE name = "' . mysql_real_escape_string($userid2) . '" AND testname = "' . mysql_real_escape_string($tid2) . '"') 
        && mysql_affected_rows(); 
    
    if ($success) { 
        // DELETEd data in both queries 
    } else { 
        // did not DELETE any data in either query 
    } 
    

    また、あなたの古くなったmysql_の*のものを置き換えるためにPDOに見たいと思うかもしれません。

    関連する問題