php+Mysqliは転送の問題を処理するためにトランザクションを使用します
この例では、php+Mysqli がトランザクションを使用して転送の問題を処理する方法を説明します。参考にみんなで共有してください
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
header("コンテンツタイプ:text/html; charset=utf-8");
$mysqli = new mysqli("localhost", "root", "064319", "php"); $mysqli->set_charset("utf8");
if($mysqli->connect_errno) { die('データベース接続に失敗しました'.$mysqli->connect_error); }
$mysqli->autocommit(false) //自動コミットモードを false に設定します ;$flag = true //トランザクションが正常に実行されたかどうかを示すフラグ
$query = "アカウントセットの残高=balance-1000、id=3を更新"; $result = $mysqli->query($query); $affected_count = $mysqli->affected_rows; if(!result || $affected_count == 0) { //失敗 $flag = false; }
$query = "アカウントセットの残高=残高+1000、id=2を更新"; $result = $mysqli->query($query); $affected_count = $mysqli->affected_rows; if(!$result || $affected_count == 0) { $flag = false; }
if($flag) { $mysqli->commit(); echo '転送成功'; } 他 { $mysqli->rollback(); echo '転送に失敗しました'; }
$mysqli->autocommit(true) //トランザクションを自動的にコミットするようにリセットします ;$mysqli->close(); ?> |
コード2:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
試してください{ $pdo=新しい PDO("mysql:host=localhost;dbname=psp","root",""); $pdo->exec("set names utf8"); $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);//例外処理モードを設定します $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,0);//自動送信をオフにする }キャッチ(PDOException $e){ echo "データベース接続に失敗しました"; 終了; }
試してください{ $年齢=10; $pdo->beginTransaction();//トランザクションを開始します $affected_rows1=$pdo->exec("update kfry set k_age=k_age+{$age} where k_name='user1'"); $affected_rows2=$pdo->exec("update kfry set k_age=k_age-{$age} where k_name='user2'"); // 成功または失敗するために自由に変更してください /* if($affected_rows1&&$affected_rows2) { $pdo->commit(); エコー「操作は成功しました」; }その他{ $pdo->rollback(); } */ if(!$affected_rows1) throw new PDOException("Add error"); if(!$affected_rows2) throw new PDOException("エラーを減らす"); エコー「操作は成功しました」; $pdo->commit();//最初の 2 つの更新 SQL ステートメントが正常に実行された場合、トランザクション全体が正常に実行されます }キャッチ(PDOException $e){ echo "操作が失敗しました:".$e->getMessage(); $pdo->rollback();//実行トランザクションのステートメントに問題があり、トランザクション全体がキャンセルされます } $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,1); //テストが成功したかどうか echo "n の演算結果は: n"; $sql="kfry から * を選択"; $result=$pdo->クエリ($sql); foreach($result as $v) { echo $v['k_name']." ".$v['k_age']."n"; } ?> |
以上がこの記事の全内容ですが、皆さんに気に入っていただければ幸いです。