PHPでは、 MySQLI拡張機能を使用すると、MySQLI_STMT :: $エラーが事前処理ステートメントに関連するエラー情報を取得するために使用できる非常に便利な関数であるMySQLデータベースと対話するのに役立ちます。データベース操作を実行すると、特にマルチステップ操作では、エラーがデータの矛盾を引き起こす可能性があります。操作の信頼性を確保するために、 MySQLI_STMT :: $エラー関数をトランザクション管理機能と組み合わせて使用してエラーを処理し、エラーが発生したときにロールバックし、それによりデータの一貫性と整合性を確保できます。
mysqli_stmt :: $エラーは、最近実行されたプリプロセシングステートメントに関連するエラー情報を返すMySqli_Stmtクラスのプロパティです。このプロパティは、SQLステートメントの正確性をデバッグして確保するために非常に重要です。エラーメッセージを含む文字列を返し、エラーが発生しない場合、空の文字列。
トランザクションは、成功または失敗する運用のコレクションです。 MySQLのトランザクション管理は、複数の操作を実行するときに、途中でエラーが発生した場合でも、操作前の状態に復元できるようにするのに役立ちます。トランザクションで複数の操作を実行することにより、データの一貫性と整合性を確保できます。
MySQLでは、トランザクションを次のSQLステートメントで制御できます。
トランザクションを開始または開始:トランザクションを開始します。
コミット:変更が永続的に行われるようにトランザクションを送信します。
ロールバック:トランザクションをロールバックし、トランザクションのすべての変更を取り消します。
データベース操作を実行するとき、特にデータ更新の複数のステップが関与している場合、各ステップが成功することを確認する必要があります。これらの手順のいずれかが失敗した場合、一部のデータの更新を正常に回避するためにトランザクション全体をロールバックする必要があります。 MySQLI_STMT :: $エラーを使用して、SQLステートメントのエラーメッセージをキャプチャし、エラーが発生したときにトランザクションをロールバックできます。
mysqli_stmt :: $エラー関数をトランザクションロールバックと組み合わせる方法を示す簡単な例を次に示します。
<?php
// データベース接続を作成します
$mysqli = new mysqli("localhost", "username", "password", "database");
// 接続が成功しているかどうかを確認してください
if ($mysqli->connect_error) {
die("接続に失敗しました: " . $mysqli->connect_error);
}
// トランザクションを開始します
$mysqli->begin_transaction();
try {
// 最初のクエリ操作
$stmt = $mysqli->prepare("INSERT INTO users (username, email) VALUES (?, ?)");
$stmt->bind_param("ss", $username, $email);
$username = 'johndoe';
$email = '[email protected]';
$stmt->execute();
// エラーを確認してください
if ($stmt->error) {
throw new Exception("クエリの実行中にエラーが発生しました: " . $stmt->error);
}
// 2番目のクエリ操作
$stmt = $mysqli->prepare("UPDATE accounts SET balance = balance - 100 WHERE user_id = ?");
$stmt->bind_param("i", $user_id);
$user_id = 1;
$stmt->execute();
// エラーを確認してください
if ($stmt->error) {
throw new Exception("クエリの実行中にエラーが発生しました: " . $stmt->error);
}
// トランザクションを送信します
$mysqli->commit();
echo "操作は成功しました!";
} catch (Exception $e) {
// エラーが発生した場合,ロールバックトランザクション
$mysqli->rollback();
echo "操作に失敗しました: " . $e->getMessage();
}
// 接続を閉じます
$mysqli->close();
?>
トランザクションを開始します:
$ mysqli-> begin_transaction()を使用します。トランザクションを開始します。これにより、同じトランザクション内で次のデータベース操作が作成されます。
データベース操作を実行します:
MySQLI Preprocessingステートメントを使用して、1つの挿入操作と1つの更新操作の2つのデータベース操作を実行します。各操作の後、エラーが発生したかどうかを確認します。エラーが発生した場合、新しい例外をスローして例外をスローし、例外処理でトランザクションをロールバックします。
エラーを確認してください:
SQL実行が$ stmt->エラーによって実行されるときにエラーメッセージを取得します。エラーが発生した場合、例外をスローし、トランザクションをロールバックします。このようにして、以前の操作とその後の操作の両方が取り消され、データの一貫性が確保されます。
トランザクションをロールバックします:
操作中に例外がキャッチされた場合、 $ mysqli-> lollback() ;を使用してトランザクションをロールバックします。これにより、トランザクションで行われたすべての変更が取り消され、一部のデータが正常に更新されるのを防ぎますが、他のデータが更新されません。
トランザクションを送信:
すべての操作が正常に実行された場合、 $ mysqli-> commit()を使用してトランザクションを送信します。変更がデータベースに永久に保存されるようにします。
MySQLI_STMT :: $エラー関数とトランザクションロールバックメカニズムを組み合わせることにより、データベース操作の信頼性を確保できます。複数のデータベース操作が実行されると、1つの操作が失敗した場合、データの矛盾を回避するためにトランザクションをロールバックできます。この方法は、コードの堅牢性を改善するだけでなく、エラーが発生したときにデータが損傷しないことを保証します。これは、開発における一般的なエラー処理モードです。