PDOについて

SQL課題〜ブログ用のデータベースを作成しよう!にて、記事用のテーブル、コメント用のテーブル、ユーザー管理のテーブルを作成しました。
PHPを使用してデータベースを操作するためには、 PDO という仕組みを利用します。
(他にも方法がありますが、PDOが最も広く使われています。)

PDOとは


PHP公式リファレンス-PDO-
PDOは、PHPに標準的に備わっているモジュール(クラス)です。
正式には、 PHP Data Objects といいます。

クラスとインスタンスでやったような「たい焼きの型」ならぬ、「 データベースと接続する型 」をPHPが用意してくれています。
型があるということは、そのクラスが持つ様々な便利メソッドも使用できるようになります。

まずは簡単に使ってみましょう。

データベースと接続してみる


pdo という名前のフォルダを作成し、 db_connect.php というファイルを作成しましょう。
まずは、下記をコピペしてください。

<?php
define('DB_DATABASE', 'yigroupBlog');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', 'root');
define('PDO_DSN', 'mysql:host=localhost;charset=utf8;dbname='.DB_DATABASE);

try {
    $dbh = new PDO(PDO_DSN, DB_USERNAME, DB_PASSWORD);
    echo 'DBと接続しました。';
} catch (PDOException $e) {
    echo 'Error:' . $e->getMessage();
    die();
}
?>

PHPを経由してMySQLにログインする必要があるので、ログイン情報を教えてあげます。
そのとき、定数にしておくと、あとあと修正があった場合も修正箇所が少なく済みます。
定数でもやりましたが、データベース情報のような 変わることがない 値については変数ではなく、定数にした方が良いです。

// DB名
define('DB_DATABASE', 'yigroupBlog');
// MySQLのユーザー名
define('DB_USERNAME', 'root');
// MySQLのログインパスワード
define('DB_PASSWORD', 'root');
// DSNとは、プログラムからDBを参照する場合の名前
define('PDO_DSN', 'mysql:host=localhost;charset=utf8;dbname='.DB_DATABASE);

なお、この設定は導入研修で設定した値です。
Windowsユーザーの方でパスワードをまだ設定していない方は、
[MAMP、XAMPPの使い方-MySQLへのログイン]) で設定をしてください。
導入研修以降に変更した場合は、その値に修正してください。

try {
    // 省略
} catch (PDOException $e) {
    // 省略
}

この構文は、try...catch~と呼びます。
tryの括弧内の処理を実行し、もし失敗したらその失敗をキャッチして 例外 を発生させます。
要は失敗した場合の処理です。
PDOException $eと書いておくと、失敗した理由が$eに入ってきます。
ここはこう書く決まりと覚えておいた方が良いです。

PDOのインスタンスを作成する

それでは、まずtryする処理を見てみましょう。
といっても今回はPDOのインスタンスを作成するだけです。

$pdo = new PDO(PDO_DSN, DB_USERNAME, DB_PASSWORD);

PDOの構文は、

インスタンス = new PDO(データベースのDSN, ユーザー名, パスワード);

データベースのDSNなどはまだ難しいかもしれませんが、当面は先ほど定数で宣言した部分を使いまわしてくれれば良いかと思います。
これで、DBと接続するインスタンスができます。
さて、ここまできたら、MAMP / XAMPPのサーバーを起動しましょう。
MAMP、XAMPPの使い方
起動が確認できたら、試しに[http://localhost/LetsEngineer/curriculum/pdo/db_connect.php] にアクセスしてみましょう。

「DBと接続しました。」とメッセージが出ているので、接続は成功しています。
それでは、パスワードを間違った値にするとどうでしょうか?

define('DB_PASSWORD', 'hogehoge');

これでアクセスすると、なにやらErrorと出ます。

この英語は「アクセス拒否されました」ということになります。
間違ったパスワードだから当たり前です。
それでは、この文章はどこから現れたのでしょうか?
これが失敗したときのcatch文です。

} catch (PDOException $e) {
    echo 'Error:' . $e->getMessage();
    die();
}

先ほど、$eに失敗した理由が入ってくると記述しました。
実は$eもインスタンス(オブジェクト)であり、いくつかメソッドを持っています。
そのうちの一つが、 エラーメッセージを出力する $e->getMessage()です。

最後にdie();とありますが、これは接続を終了することを意味します。
接続失敗したらそれ以上接続しようとしない方が賢明です。

さて、これだけでもうDBから、例えばユーザー情報を取得したり、ユーザー情報を更新したりできます。
実際の使い方は、後のカリキュラムで使いながら覚えましょう。

ちなみに、公式ドキュメントとしては、接続、および接続の管理をやりました。
この公式ドキュメントの内容が理解できるようになることも、カリキュラムの目標の1つです。

カテゴリー

アーカイブ

Close Bitnami banner
Bitnami