1. PHPトランザクション処理の概要:
トランザクション: いくつかのイベントのコレクションです
トランザクション処理: すべてのイベントが正常に実行された場合、トランザクションは実行されますが、いずれかのイベントが正常に実行できなかった場合、トランザクションの他のイベントは実行されません。
MySQL バージョンが BDB または InnoDB テーブル タイプをサポートしている限り、MySQL にはトランザクション処理機能があります。その中で最もよく使われるのは InnoDB テーブル タイプです。その後、Oracle による InnoDB 買収などの出来事が MySQL を不幸にするような出来事が起こりましたが、そのようなビジネス上の出来事はテクノロジーとは何の関係もありません。InnoDB テーブル タイプを例に挙げて簡単に説明しましょう。 MySQL のトランザクション処理。
2. PHPトランザクション処理コード:
試してみる{
$pdo=new 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);//自動送信をオフにする
}catch(PDOException $e){
echo "データベース接続に失敗しました";
退出;
}
試してみる{
$age=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();
echo "操作は成功しました";
}その他{
$pdo->rollback();
} */
if(!$affected_rows1)
throw new PDOException("Add error");
if(!$affected_rows2)
throw new PDOException("エラーを減らす");
echo "操作は成功しました";
$pdo->commit();//この時点で最初の 2 つの更新 SQL ステートメントが正常に実行された場合、トランザクション全体が正常に実行されます
}catch(PDOException $e){
echo "操作が失敗しました:".$e->getMessage();
$pdo->rollback();//実行トランザクション内のステートメントに問題があり、トランザクション全体がキャンセルされます
}
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,1);
//テストが成功したかどうか
echo "n の演算結果は: n";
$sql="kfry から * を選択";
$result=$pdo->query($sql);
foreach($result as $v)
{
echo $v['k_name']." ".$v['k_age']."n";
}
?>