LoginSignup
1
1

More than 3 years have passed since last update.

【Php】PDOでdatabaseに接続する(4)

Posted at

初めに

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文によるデータの処理がうまくいった場合には次のようにブラウザーに表示されます。
スクリーンショット 2021-06-11 7.38.47.png

処理が失敗した場合(rollback)

sql文の実行に失敗した場合、rollbackによって元通りにします。今回はわざとデータベースに無いデータを取得するsql文で試してみました。

スクリーンショット 2021-06-11 7.37.37.png

参考サイト

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

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1