PHPでデータベース接続する時、PDO周りは不明な用語が沢山出てきて混乱しがちな為、
単語や情報を一つずつ整理してロジックを組み立てる必要がある。
###データベース接続の流れ
データベースの接続 → データベースの操作 → データベースとの接続終了
という流れが基本的な鉄則。
例えるなら、
本棚から必要な本を見つけ手に取る(接続)
本の中から必要な情報を探す(操作)
本を閉じ、本棚にしまう(接続終了)
と行った所。
###書き方 判例
接続方法自体は色々あるが現在は、PDO(PHP Data Object)が主流。
下記判例を示すと、
<?php
//まず登録項目3点を変数化する。
$dsn = 'mysql:dbname=指定のテーブル;host=指定のホスト名;charset=utf8';
$user ='RDBMS登録のユーザー名(rootとか)';
$password ='RDBMS登録のユーザーパスワード(rootとか)';
//例外処理
try{
$dbh = new PDO($dsn, $user, $password); //ここが接続の文
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT * FROM recipes";
$stmt = $dbh->query($sql);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo $result;
$dbh = null;
}catch(Exception $e){
echo"接続失敗:". htmlspecialchars($e->getMessage(),ENT_QUOTES, 'UTF-8') . "<br>";
die();
}
?>
こんな所でしょうか?
初心者がいきなりこれを見ても、は?って感じになりますよね。
いろんな部分が、は?って感じですよね。
何回写経した所で、一つ一つの箇所が理解出来ない事には、このPDO周りの部分は毎回大きく時間が取られてしまいます。
そこで一つ一つパーツごとに切り分けて、ロジックを噛み砕いていかなくてはいけません。
・new PDO・・・PDOで接続。newはそのまま「新たに」って意味で、ここはもうそういう書き方をしないといけないと思うようにしましょう。
new PDOの後に、接続情報やユーザー名、パスワードなどを指定して準備していく。
ここまでの固まりを「$dbh」という変数に格納する。
今後データベースの機能を使う場合には、この変数「$dbh」を指定する。
・$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
・・・生成したPDOオブジェクトに対して、setAttribute()メソッドで設定を行い、
データベース接続の設定(エラーモードの設定)をこの行でやっている。
setAttribute()メソッドは、データベース接続時の設定や、SQL文実行時の挙動など、
データベースハンドルの属性を変更するためのメソッド。
$stmt = $dbh->query($sql);
・・・①$dbhはデータベースの接続を設定した変数
②queryは問い合わせ、質問するといったイメージ
③$sqlはSQL文の内容
という流れから、この文は、SQL文を実行して結果を問い合わせるという意味が入っている。
->query()とする事で、PDOの機能の問い合わせを実行する事が出来た。
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
・・・SQL文の実行結果をカラム名をつけた配列として取り出す。
配列として全て取り出す命令はfetchAll()という関数。
PDO::FETCH_ASSOCは、実行結果をつけた配列として返す。
・$e->getMessage()
・・・catch時にExceptionを代入する変数$eを用意する。Exceptionは例外という意味。
$eの中にあるメッセージを取得する命令getMessage()は、$dbhで指定した時と同様に、
->(アロー演算子)で指定する。
$e->getMessage()とすれば、エラー発生時のメッセージを取得できる。
こうやって一つ一つ要約していくと、順序立てて処理が進んでいる事が分かる。
まずデータベース接続する。
エラー設定をする。
SQL文を発行する準備をする。
SQL文を発行して問い合わせる。
SQL文の実行結果を取り出す。
データベース接続を切断する。
といった流れとして、翻訳が成り立つ。
PDOstatementの所はもう少し詳細が欲しい所なので、それはまた次の機会にまとめる。