0

私は2つのテーブルを手に入れました。1 つは口座、もう 1 つは利息です。1 つのアカウントは複数の興味を持つことができ、編集することができます。現在、プロセスはこのアカウントのすべての興味を削除してから、これらの興味を挿入しています。クエリは次のとおりです。

"DELETE FROM Interests WHERE account_id='$id'"

"INSERT INTO Interests (account_id, interest_name) VALUES('$id', '$name')"

ユーザーがアカウントを更新するときに両方のクエリを使用しますが、挿入が失敗し、テーブルに何も挿入されません (ps。interests_id は auto_increment であり、これはカウントされました)が、テーブルに新しいものは何もありません。削除クエリをコメントアウトすると。挿入は成功します。

誰でも私に何ができるか知っていますか?

4

5 に答える 5

2

テーブルのレコードを更新したい場合は、update操作を行います。このような:

UPDATE TABLE_NAME SET FIELD_NAME = 'VARIABLE_NAME' 
  WHERE PRIMERY_FIELD_NAME = 'VARIABLE_NAME' ;
于 2012-12-03T06:13:02.873 に答える
0

テーブル レコードを更新する場合は、更新操作を実行できます。次のように

UPDATE Interests 
SET 
interest_name = '$name' 
WHERE
accountno = '$id' ;

それを試してみてください。この方法で問題を解決できます。

于 2012-12-03T06:09:01.327 に答える
0

これは、クエリが 2 つの単一トランザクションとして扱われ、実行の順序が保証されないために発生します。あなたが説明している効果は、挿入が削除の前に処理されるため、 interests_id 適切に自動インクリメントされ、行が削除ステートメントによって削除されるためです。クエリ ロジックを変更するか、1 つのトランザクションで両方のクエリを実行する必要があります。

于 2015-06-15T10:59:20.860 に答える
0

クエリが失敗した場合は、エラーをキャプチャして、何が問題なのかを確認する必要があります。PHP 用のすべての MySQL API で、クエリが失敗すると、これを示すステータス コードが返されます。このステータス コードを確認する例は、ドキュメントで簡単に見つけることができます。しかし、ほとんどの開発者はステータスを確認できません。


トランザクションを使用して、両方の変更が同時に成功するか、どちらも適用されないようにします。

データベース トランザクションの使用を決定する方法

MySQL でのトランザクションの定義: http://dev.mysql.com/doc/refman/5.5/en/glossary.html#glos_transaction

MySQL でトランザクションを開始およびコミットするための構文: http://dev.mysql.com/doc/refman/5.5/en/commit.html

InnoDB を使用する必要があります。MyISAM はトランザクションをサポートしていません。 http://dev.mysql.com/doc/refman/5.5/en/innodb-storage-engine.html

PHP では、古い ext/mysql API の使用をやめて、MySQLi または PDO の使用を開始する必要があります。

http://php.net/manual/en/mysqli.quickstart.transactions.php

http://php.net/manual/en/pdo.begintransaction.php

于 2012-12-03T05:59:17.580 に答える