PHPでPDOを使ってデータベースに接続する方法

Programming

こんにちは。あっきーです。
21歳でニートしながら、プログラミングと英語の勉強をしています。

今回はPHPでデータベースに接続する方法を紹介していきます。

PHPはサーバー上にある情報を取得したり、データベースに情報を追加したりできる言語です。
なのでデータベースに接続することは頻繁にあり、webサービスを作る際には必須です。

これをマスターしていきましょう。

ここではXAMPPという開発環境ソフト利用しています。あらかじめ準備しておいてください。

データベース接続にはPDOを利用する

「データベース 接続」などと検索するといろいろな方法が出てくるんですが、PODというものを利用するのが一般になっているようです。僕もこれを使っています。

ちょっとだけ解説。

PDOは「PHP Data Objects」の略称で、ざっくり説明すると「PHPと全データベースの仲介役」です。
データベースっていろんな種類があって、”Oracle Database”, “MySQL”, “PostgreSQL”などなどあります。

普通データベース接続となると、それぞれが持つ関数を利用する必要があります(例えばmysqlに接続したいならmysqli_conntentを使う)。

ですが、PDOを使うとすべてのデータベースに接続できるようになります。

  • PHPでPDOに接続(同じ命令)
  • PDOが各データベースの仲介になってそれぞれに接続できる

PDOを使えるとデータベースを変えることになった(ヤバい!)という場合でも対処できます。接続の命令は同じだからです。

若干レベルは高めですが、慣れれば便利なので、これを使って接続をしてみます。

ここではMySQLでの接続を解説していきます。

PDOによるデータベース接続方法

先にコードをお見せします。


$host='localhost';
$db = 'データベース名';
$user = 'ユーザー名';
$pass = 'パスワード';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
  PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
  PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
  PDO::ATTR_EMULATE_PREPARES => false,
];
$pdo = new PDO($dsn, $user, $pass, $options);

一番最後の行でPDOの接続をしています(PDOクラスというものを変数に代入している)。
new PDO()の()内にいくつか書かないといけないので、それらを上で設定しています。

PDO接続に必要な情報

()内には以下の情報が必要です。

  • 1.$dsn:データ元の名前→MySQLを設定
  • 2.$user:MySQLのユーザー名→XAMPP設定時に登録したもの
  • 3.$pass:MySQLのパスワード→XAMPP設定時に登録したもの
  • 4.$options:PDOに関するモード→エラーの出し方や、データ取得時の配列の形の設定

DSN設定

最初にDSN(データ元の名前)を設定します。つまり「MySQLだよ!」と伝える設定です。
形は決まっていてこんな感じです。


$host='localhost';
$db = 'データベース名';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";

一番最後の$dsnというところがMySQLの宣言になるんですが、形がこうなってます。

  • 1.host:ホスト名→ローカル環境では’localhost’でOK
  • 2.dbname:データベース名(自分で設定)
  • 3.charset:文字設定→’utf8mb4’でOK

データベース名だけ各自設定していただければコピペでOKです。
データベース名というのは例えば図のような名前です。

XAMPPからMySQLにログインしたときに、左側に出るものがデータベース名です。僕の場合、’phplogin’というデータベースを作成したのでこれを利用しています。

ちなみに、DSN設定時のコロン(:)やセミコロン(;)は勝手に変えるとエラーになってしまうので、注意してください。

ユーザー名とパスワード設定

これはXAMPPでMySQLにログインするときに入力するものを使えばOKです。

オプション設定

最後にオプション設定です。これは説明すると長くなるので、「PDOの詳しい解説」の方でお話します。
今回紹介したオプション設定が一番有効的だと思うので、こちらもコピペOKです。


$options = [
  PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
  PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
  PDO::ATTR_EMULATE_PREPARES => false,
];

これで接続はOKです。この部分を外部関数などでまとめておくと、どのファイルからも使えて便利になるので試してみてください。

例外処理(try-catch)はしなくていいの?

よくデータベース接続とセットで出てくるのが、例外処理というもので、よくこんな形で出てきます。


try {
    // MySQLへの接続
    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);

} catch (PDOException $e) {//PDOException(例外処理)をキャッチ
    $e->getMessage()
    exit;
}

これは「PDO接続に失敗したらエラーメッセージを出すよ」というものなんですが、実は必要ないんです。
というより、使ってはいけません。

理由は2つあって

  • そもそもtry-catchを使わなくても標準でPHPがエラーを出してくれる
  • try-catchを使うと何がエラーなのかが見えにくくなる→修正しにくい

try-catchは無視して素直にデータベース接続をしておけば問題ないということです。
これはよくある間違いなので注意しておきましょう。

例外処理がいけないというわけではなく、この場合は必要ないよというだけの話です。例外処理をすべきところではする必要があります。例外処理の方法と使う場面の解説は別でしたいと思います。

まとめ

というわけで、今回はPDOによるデータベース接続について解説しました。
Webサービスを作りたい人はこれを理解した上で実践していきましょう。

それでは。

スポンサードサーチ

オススメ英語学習用SNS "Our Dictionary"

人気記事英語学習用SNSをLaravelで作ってみた【システム解説あり】