0

特定の ID に対してデータ セットのコピーが 1 つだけであることを保証するDELETEステートメントが後に続くMySQLステートメントがあります。INSERT(UPDATEを使わないのには理由があります)

問題は、5000 以上のエントリにまたがるデータ セットで、DELETE ステートメントが実行されず、INSERT ステートメントが実行されたインスタンスが 3 つあることに気付いたことです。最終結果は、指定された ID のエントリが重複していました。

以下は私のコードです。実行に失敗すると、php スクリプトはエラー メッセージとともに終了します。それは私の経験のレベルでなければなりません。問題の可能性はありますか?

//delete
$query_delete = "DELETE FROM q1_6_list WHERE q_id = '".mysql_real_escape_string($q[qID])."'";   
$result = mysql_query($query_delete) or errorReport("Error in query: $query_delete. ".mysql_error());
//insert
$query_insert = "INSERT INTO q1_6_list (q_id, vehicle, quantity) VALUES";
$result = mysql_query($query_insert) or errorReport("Error in query: $query_insert. ".mysql_error());
if (!$result)
    errorReport($result);   

編集

よく調べてみると、直後に以下のコードを追加していないことに気付きました$result = mysql_query($query_delete)....

if (!$result)
    errorReport($result);   

これは、他のすべてのエラー メッセージをキャッチするためにも必要でしょうか。それとも、mysql_query($query_delete) or errorReport...発生したすべてのエラーをキャッチするのでしょうか?

4

2 に答える 2

1

ここでの最善の策は、q1_6_list (q_id) に主キーを作成することです。

ALTER TABLE q1_6_list ADD PRIMARY KEY(q_id)

REPLACE INTOMySQLの構文を使用するため、削除が失われ、挿入が次のようになります。

$query_insert = "REPLACE INTO q1_6_list (q_id, vehicle, quantity) VALUES";
于 2013-02-20T14:56:10.353 に答える
0

削除クエリが成功した場合にのみ、挿入クエリを実行できます。

if (mysql_query($query_delete)) {
    mysql_query($query_insert);
}
于 2013-02-20T14:49:20.530 に答える