※この記事は「2021年5月21日」に更新しました。
前回は、phpMyAdminのセキュリティの設定について学習しました。
今回は、PDO を利用したデータベース接続についてです。
PHP からデータベースへ接続する方法はいくつかありますが、PDO(PHP Data Object)が使える環境であれば、この方法がおすすめです。
軽量で高性能なインターフェースを定義します。
データベースへの接続
PDO によるデータベースへの接続です(MySQLの場合)。
$dbh = new PDO('mysql:host=ホスト名;dbname=データベース名;charset=文字コード', ユーザー名, パスワード);
Java のような、オブジェクト指向的な考え方です。
new演算子で PDO クラスのオブジェクトをインスタンス化します。
ちなみにインスタンス化というのは、クラスから生成した実際に動作するオブジェクトのことです。
PDO 実行時のエラーモードを設定
PDO実行時のエラーモードを設定します。
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
SQLの発行
SQLの発行です。
$stmt = $dbh->query(SQL文);
ちなみに -> は、アロー演算子と言います。
インスタンスのプロパティやメソッドにアクセスするのに使います。
SQLの結果を配列として取り出す
上の続きですが、結果を配列として取り出します。
$stmt に結果が格納されているので、それを取り出します。
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
ここで PDO::FETCH_ASSOC は、実行結果をカラム名を付けた配列として返します。
PDO::FETCH_NUM なら、実行結果を0から始まるカラム番号を付けた配列として返します。
PDO::FETCH_BOTH なら、実行結果をカラム名と0から始まるカラム番号を付けた配列として返します。
データベースを切断する
データの操作が終わったら、データベースとの接続を切断します。
$dbh = null;
try~catch文でエラーをチェックする
データベース接続する場合、try~catch文でエラーをチェックできるようにすべきです。
try { // 通常動作(データベース接続から切断までのコード) } catch (Exeption $e) { // 例外処理(エラーが起きたときに行うコード) }
データベースのエラーはわかりにくいので、こういった処置をしていないと見た目ではわからなくても、整合性がとれなくなってしまうといったこともあり得ます。
また、次のようにエラーメッセージを取得し、表示させることもできます。
echo $e->getMessage();
ただし、実際のサービスを想定した場合、エラーメッセージをブラウザで表示させることはないでしょうし、$e->getMessage() に以前紹介した htmlspecialchars関数を使う方が安全性が向上します。
最後に
いかがでしょうか。
PHP のバージョンが古いとかで使えない場合は、低レベルデータベース関数を使う必要があります。
しかし、現状だとデータベースの接続は PDO を利用するのが一般的みたいです。
次回は、SQLの基礎 について紹介していきます。
データベースを扱う以上、最低限の SQL文は、理解しておいた方が良いと思います。