【 PHP 】PHP8に入門してみた 197日目 PHPの基本 ( データベース トランザクション )
PHP8技術者認定初級試験 が始まるようなので 試験に向けて (できるだけ)勉強しようと思います! 使用する書籍は独習PHP 第4版(山田 祥寛)|翔泳社の本 (shoeisha.co.jp) となります。
データベース
トランザクション
トランザクションとは、複数のデータベース操作を一連の処理として扱い、全体が完了するか失敗するかのいずれかになるまで、
中途半端な状態になることなく一括して処理を行う仕組みです。
トランザクションには、以下のような特徴があります。
- ACID特性
トランザクションは、ACID(Atomicity, Consistency, Isolation, Durability)の特性を持っています。
それぞれ以下のような意味を持ちます。
- Atomicity(原子性):トランザクションを構成する操作は、全て実行されるか全く実行されないかのどちらかである
- Consistency(一貫性):トランザクションを実行する前と後で、データベースの整合性が維持される
- Isolation(独立性):トランザクションは、他のトランザクションと独立して実行される
- Durability(永続性):トランザクションが完了した時点で、その結果は永続的に保存される
- ロールバック
トランザクションが失敗した場合、途中までの処理を全て取り消して、トランザクション開始前の状態に戻すことができます。
この処理をロールバックと呼びます。 - コミット
トランザクションが完了した場合、その処理を確定して、データベースに反映することができます。
この処理をコミットと呼びます。
トランザクションは、一連の処理をまとめて扱えます。
例えば複数のテーブルにまたがるデータの更新など、複雑な処理を安全に実行することができます。
また、トランザクションを使うことで、データの整合性を保ちながら複数のユーザーが同時にデータベースにアクセスすることができます。
トランザクションの例です。
現在のテーブルのデータ
+-------------------+----------------------------------------------------------+-------+--------------------+------------+
| isbn | title | price | publish | published |
+-------------------+----------------------------------------------------------+-------+--------------------+------------+
| 978-4-7741-6566-0 | PHPライブラリ&サンプル実践活用 | 2480 | 技術評論社 | 2020-06-24 |
| 978-4-7741-7078-7 | サーブレット&JSPポケットリファレンス | 2680 | 技術評論社 | 2021-01-08 |
| 978-4-7741-7568-3 | Angularアプリケーションプログラミング | 3700 | 技術評論社 | 2021-08-19 |
| 978-4-7980-4179-7 | ASP.NET MVC実践プログラミング | 3500 | 秀和システム | 2020-09-20 |
| 978-4-7980-4512-2 | はじめてのASP.NET Webフォームアプリ開発 | 3000 | 秀和システム | 2021-11-13 |
| 978-4-7981-3546-5 | JavaScript逆引きレシピ | 3000 | 翔泳社 | 2020-08-28 |
| 978-4-7981-4034-6 | 10日でおぼえるJSP&サーブレット入門教室 | 2800 | 翔泳社 | 2021-03-16 |
| 978-4-7981-4102-2 | プログラマのためのDocker教科書・・(^^)/ | 5000 | 翔泳社 | 2021-11-19 |
| 978-4-7981-6849-4 | 独習PHP 第4版 | 3740 | 翔泳社 | 2021-06-14 |
| 978-4-8222-9644-5 | アプリを作ろう! Android入門 | 2000 | 日経BP社 | 2021-08-21 |
+-------------------+----------------------------------------------------------+-------+--------------------+------------+
trainsaction.php
<?php
require_once './DbManager.php';
try {
// データベースへの接続
$db = getDb();
// 例外有効化
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// トランザクション開始
$db->beginTransaction();
$insert_query = "INSERT INTO book(isbn, title, price, publish, published)";
$db->exec("{$insert_query} VALUES('978-4-7981-2151-2', '独習PHP 第X版', 3200,'翔泳社','2021-04-12')");
// 主キー(978-4-7981-2151-2)が重複するのでエラーになります。
$db->exec("{$insert_query} VALUES('978-4-7981-2151-2', 'ひとりで学ぶPHP', 3500,'翔泳社', '2021-06-01')");
$db->commit();
} catch (PDOException $e) {
// ロールバック
$db->rollBack();
die("エラーメッセージ: {$e->getMessage()}");
}
実行後のテーブルのデータ
データは全く変化ありません!
+-------------------+----------------------------------------------------------+-------+--------------------+------------+
| isbn | title | price | publish | published |
+-------------------+----------------------------------------------------------+-------+--------------------+------------+
| 978-4-7741-6566-0 | PHPライブラリ&サンプル実践活用 | 2480 | 技術評論社 | 2020-06-24 |
| 978-4-7741-7078-7 | サーブレット&JSPポケットリファレンス | 2680 | 技術評論社 | 2021-01-08 |
| 978-4-7741-7568-3 | Angularアプリケーションプログラミング | 3700 | 技術評論社 | 2021-08-19 |
| 978-4-7980-4179-7 | ASP.NET MVC実践プログラミング | 3500 | 秀和システム | 2020-09-20 |
| 978-4-7980-4512-2 | はじめてのASP.NET Webフォームアプリ開発 | 3000 | 秀和システム | 2021-11-13 |
| 978-4-7981-3546-5 | JavaScript逆引きレシピ | 3000 | 翔泳社 | 2020-08-28 |
| 978-4-7981-4034-6 | 10日でおぼえるJSP&サーブレット入門教室 | 2800 | 翔泳社 | 2021-03-16 |
| 978-4-7981-4102-2 | プログラマのためのDocker教科書・・(^^)/ | 5000 | 翔泳社 | 2021-11-19 |
| 978-4-7981-6849-4 | 独習PHP 第4版 | 3740 | 翔泳社 | 2021-06-14 |
| 978-4-8222-9644-5 | アプリを作ろう! Android入門 | 2000 | 日経BP社 | 2021-08-21 |
+-------------------+----------------------------------------------------------+-------+--------------------+------------+
メモ
PHP
における変数のスコープの概念はどうなっているのか・・・。
ディスカッション
コメント一覧
まだ、コメントがありません