PHPプログラミングでは、MySQLIを使用してデータベーストランザクションを実行する場合、通常、トランザクション内のすべての操作がスムーズに完了するようにする必要があります。これらの手順のいずれかが失敗した場合、どのリンクが間違っているかを正確に判断できるはずです。 mysqli :: $ errnoプロパティは、トランザクション障害の原因を診断するのに役立ちます。この記事では、データベーストランザクションのどのステップがmysqli :: $ errnoを介して失敗したかを詳細に説明します。
MySqliでは、 MySqli :: $ ERRNOは、最新操作のエラーコードを表すプロパティです。このプロパティを通じて、間違った数値コードを取得して、操作が成功したか失敗したかを判断できます。操作が失敗した場合、 errnoは対応するエラーコードを返し、成功した場合は0を返します。
トランザクションを開始します
トランザクションを開始する前に、 mysqli :: begin_transaction()に電話してトランザクションを開始する必要があります。
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("接続に失敗しました: " . $mysqli->connect_error);
}
// トランザクションを開始します
$mysqli->begin_transaction();
トランザクションでSQL操作を実行します
トランザクションでは、複数のSQLクエリを実行する場合があります。各クエリのエラーコードをチェックして、手順が故障したかどうかを判断します。
// 最初のものを実行します SQL クエリ
$result1 = $mysqli->query("UPDATE users SET balance = balance - 100 WHERE id = 1");
// 检查第一个クエリ是否成功
if ($mysqli->errno) {
echo "間違い:クエリ 1 失敗,間違い代码:" . $mysqli->errno;
$mysqli->rollback(); // ロールバックトランザクション
exit();
}
// 2番目を実行します SQL クエリ
$result2 = $mysqli->query("UPDATE users SET balance = balance + 100 WHERE id = 2");
// 检查第二个クエリ是否成功
if ($mysqli->errno) {
echo "間違い:クエリ 2 失敗,間違い代码:" . $mysqli->errno;
$mysqli->rollback(); // ロールバックトランザクション
exit();
}
// 如果所有クエリ都成功,トランザクションを送信します
$mysqli->commit();
この例では、2つの更新を実行します。1つ目はユーザー1のバランスを100で削減し、2番目はユーザー2のバランスを100に増やします。クエリが失敗した場合、 MySqli :: $ errnoをチェックしてトランザクションをロールバックしてエラーコードを出力します。
mysqli :: $ errno経由のエラーを確認してください
mysqli :: $ errnoの値は、各SQL操作が実行された後に更新されます。操作が失敗した場合、 mysqli :: $ errnoは対応するエラーコードを返し、これらのエラーコードを使用して問題を決定できます。たとえば、更新操作を実行すると、次のエラーコードが表示される場合があります。
1062 :重複キーエラーを示します。
1451 :外部のキー制約エラーを示します。
上記のコードでは、 errnoに値があるかどうか($ mysqli-> errno)かどうかを確認します。もしそうなら、それはクエリが失敗したことを意味し、 mysqli :: $ errnoによって提供されたエラーコードに基づいて問題をさらに分析できます。
取引の取り扱いのエラー
トランザクションの操作が失敗した場合、トランザクション全体をロールバックする必要があります。 mysqli :: rollback()を使用して、実行されたすべてのSQL操作を元に戻して、データベースが一貫していることを確認します。上記のコードの例では、各クエリが故障したときにrollback()を呼び出し、 exit()によってスクリプトの実行を停止します。
さらに、トランザクションが終了した後、エラーがない場合、 mysqli :: commit()を使用してトランザクションをコミットして、すべての変更がデータベースに保存されるようにします。
mysqli :: $ errnoを介して、データベーストランザクションでどの操作が失敗したかを正確に判断できます。このアプローチは、デバッグとエラー処理に非常に効果的であり、問題を見つけ、複雑なトランザクションで適切な措置を講じるのに役立ちます。トランザクション処理中にエラーが発生した場合、データの矛盾を避けるためにトランザクションを直ちにロールバックする必要があります。
この記事がMysqli :: $ errnoを使用する方法をよりよく理解して、トランザクションのエラーステップを決定することを願っています。実際のアプリケーションで問題が発生した場合、MySQLエラーコードテーブルを調べることにより、問題をさらに分析および解決できます。