初めに
PDOについて学習した内容のoutput用記事です。
※内容に間違いなどがある場合はご指摘をよろしくお願いします。
※こちらの記事はあくまでも個人で学習した内容のoutputとしての記事になります。
前回の記事:
https://qiita.com/redrabbit1104/items/2668e56d4c058221388e
https://qiita.com/redrabbit1104/items/8c5bb2b364347915a0f1
https://qiita.com/redrabbit1104/items/9b5a01b81a21f266a9bb
beginTransaction()
PDOクラスにあるメソッドでsql文によるデータの取得、更新、削除などの処理を開始するメソッド。また、オートコミットモードをoffにしてくれます。戻り値はtrueかfalse。
$pdo->beginTransaction(); //トランザクションの開始
commit()
PDOクラスにあるメソッドでbeginTransaction()メソッドによって開始された処理を確定します。また、オートコミットモードをonにしてくれます。戻り値はtrueかfalse。
$pdo->commit(); //処理の確定
rollback()
PDOクラスにあるメソッドでsql文が何らかの問題によって実行されずに失敗した時に、sql文の処理を取り消し元通りに戻すメソッド。戻し値はtrueかfalse。
$pdo->rollback(); //処理のキャンセル
使ってみる
前回のsql文にtransactionの記述を追加します。処理が成功した場合と失敗した場合に分けるため、try catch文を使います。
$pdo->beginTransaction(); //トランザクションを開始
try {
//sql処理
$sql = 'select * from accounts where user_id = ?'; //疑問符place holder
$stmt = $pdo->prepare($sql); //sql文を実行する準備を行う。戻り値はPDOStatement
$stmt->bindValue(3, 1, PDO::PARAM_INT); //値の紐付け
$stmt->execute(); //実行
$pdo->commit(); //処理の確定
$result = $stmt->fetchall();
var_dump($result);
} catch (PDOException $e) {
$pdo->rollback(); //処理のキャンセル
echo $e;
}
処理が成功した場合(commit)
sql文によるデータの処理がうまくいった場合には次のようにブラウザーに表示されます。
処理が失敗した場合(rollback)
sql文の実行に失敗した場合、rollbackによって元通りにします。今回はわざとデータベースに無いデータを取得するsql文で試してみました。
参考サイト
https://www.php.net/manual/ja/pdo.begintransaction.php
https://www.php.net/manual/ja/pdo.commit.php
https://www.php.net/manual/ja/pdo.rollback.php
https://blog.tokumaru.org/2015/05/blog-post.html