⑧ データベース接続(PDO)の詳しい解説
ここでは、データベースに接続するための処理を解説します。
このコードは、前の記事で紹介した post.php から読み込まれて使われています。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php $config = require __DIR__ . '/db_config.php'; $dsn = sprintf( 'mysql:host=%s;dbname=%s;charset=%s', $config['host'], $config['dbname'], $config['charset'] ); try { $pdo = new PDO($dsn, $config['user'], $config['pass'], [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]); } catch (PDOException $e) { exit('データベース接続に失敗しました。'); } |
① 設定ファイルを読み込む
|
1 |
$config = require __DIR__ . '/db_config.php'; |
この行は、
「db_config.php の中身を読み込み、その結果を $config という箱に入れる」
という意味です。
db_config.php には、
- データベースの場所
- ユーザー名
- パスワード
などの設定が書かれています。
require は、
「必ず必要なファイルを読み込む」という命令です。
__DIR__ は、
「このPHPファイルが置かれているフォルダ」を表します。
② DSN(接続先情報)を作る
|
1 2 3 4 |
$dsn = sprintf( 'mysql:host=%s;dbname=%s;charset=%s', $config['host'], $config['dbname'], $config['charset'] ); |
ここでは、データベースの住所のような情報を作っています。
$dsn は、
「どのデータベースに、どうやって接続するか」
をまとめた文字列です。
sprintf の意味
sprintf は、
「決まった形の文章に、あとから値を当てはめて文字を作る」
ための命令です。
この部分では、
|
1 |
'mysql:host=%s;dbname=%s;charset=%s' |
という型に対して、
$config['host']$config['dbname']$config['charset']
を順番に当てはめています。
%s は、
「ここに文字を入れる場所」
という意味です。
③ try ~ catch とは何か
|
1 2 3 4 5 |
try { // 正常に動いてほしい処理 } catch (PDOException $e) { // エラーが起きたときの処理 } |
try ~ catch は、
「エラーが起きるかもしれない処理を安全に実行する」
ための書き方です。
データベース接続は失敗することがあるため、
この形で書くのが一般的です。
④ PDO を使ってデータベースに接続する
|
1 2 3 4 5 |
$pdo = new PDO($dsn, $config['user'], $config['pass'], [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]); |
この行は、
「PDOという仕組みを使って、データベースに接続し、
その接続結果を $pdo という箱に入れる」
という意味です。
new PDO の意味
new PDO は、
「データベースとつながるための新しい接続を作る」
という命令です。
$dsn→ 接続先の情報$config['user']→ ユーザー名$config['pass']→ パスワード
オプション設定の意味
-
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
エラーが起きたら、try~catch で捕まえられるようにする -
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
データを「配列(カラム名つき)」で受け取る -
PDO::ATTR_EMULATE_PREPARES => false
安全なプリペアドステートメントを使う
⑤ 接続に失敗したときの処理
|
1 2 3 |
catch (PDOException $e) { exit('データベース接続に失敗しました。'); } |
もしデータベースに接続できなかった場合、
ここが実行されます。
exit によって、
それ以上プログラムを動かさず、処理を止めます。
まとめ
このコードは、
- 設定ファイルを読み込む
- 接続先情報(DSN)を作る
- PDOでデータベースに接続する
- 失敗したら安全に止める
という流れで動いています。
初心者のうちは、
「$pdo はデータベースにつながった証拠の箱」
と考えると理解しやすくなります。
コメント