0

5人のユーザーを節約するためにDBにいくつかのクエリを書きたいです。しかし、それらをすべて保存する前に、エラーについて確認する必要があります。たとえば、最初のユーザーを挿入しましたが、エラーはありませんでした。しかし、2 番目のものを保存しようとした後、エラーが発生しました (注: エラーが重複しているだけではありません)。その後、保存したすべてのデータをキャンセルし、最初のデータを DB から削除する必要があります。何らかの方法でエラーをチェックし、3 人のユーザーすべてを保存した後...

質問: データを挿入する前にエラーをチェックする方法。

注: 別のエラーが表示される可能性があるため、データが存在するかどうかを確認するだけでは不十分です。

4

4 に答える 4

3

クエリをトランザクションでラップすることを検討してください。

于 2012-05-31T12:11:15.140 に答える
1

あなたが探しているのは取引です。このようにして、すべてのステートメントをサーバーに送信します。サーバーはサンドボックスに似た方法で実行され、サーバーはエラーをチェックしてから(エラーがない場合は)データを保存します。

これは、MySQLでステートメントを次のようにラップすることで実行できます。

BEGIN;
YOUR QUERIES GO HERE
COMMIT;

詳細については、このドキュメントを参照してください。すべてのMySQLエンジンがトランザクションをサポートしているわけではないことに注意してください。

于 2012-05-31T12:11:19.647 に答える
1

トランザクションを使用して、すべての変更を一度にデータベースにコミットしようとしましたか? その後、それらのいずれかが失敗した場合、すべてがロールバックされます。

http://dev.mysql.com/doc/refman/5.5/en/commit.htmlを参照してください。

于 2012-05-31T12:14:15.803 に答える
0

データベースに安全に挿入するには、ここでトランザクションを使用する必要があります。

DB テーブル:users having 3 fields u_id int , u_name varchar, u_email varchar

<?php
$dbh = mysqli_connect("localhost", "db_user", "password", "databse_name");
mysqli_autocommit($dbh, FALSE);

// run query 1
$query1 = "INSERT INTO users (u_name,u_email) VALUES('Abdus Samad1', 'abdul.samad1@...')";
$result = mysqli_query($dbh, $query1);
if ($result !== TRUE) {
    mysqli_rollback($dbh);  // if error, roll back transaction
}

// run query 2
$query2 = "INSERT INTO users (u_name,u_email) VALUES('Abdus Samad2', abdul.samad2@...)";
$result = mysqli_query($dbh, $query2);
if ($result !== TRUE) {
  mysqli_rollback($dbh); // if error, roll back transaction
  echo "Error found in one of queries";
}
else{
  echo "Success";
}

// assuming no errors, commit transaction
mysqli_commit($dbh);

// close connection
mysqli_close($dbh);
?>
于 2012-05-31T13:31:50.893 に答える