PHP: PDOを使用してデータベースに接続する。注意点。なぜPDOを使うのか

2018年7月5日PDO, PHP, データベース, プログラミング

    みなさん、こんにちは。プログラミングソースを探していて、いや、知りたいのはこれじゃない、って思いながら探しているうちに数時間たってしまっているPQTomです。
    よく調べ物していて自分が欲しい情報が全然出てこないってことありますよね。
    最近それによりすごく悩まされることがありました。
    そういう時に限ってそんなに大したことじゃないんですよね。
    プログラミングの基礎の話になるんですが、PHPを使用してデータベースに接続ってことをしました。
    すごく簡単なことですが、すごく時間がかかったのでなぜ時間がかかったのか、陥りやすいミスについて話したいと思います。

    PDOとは

    PDOとは「PHP Data Object」の略でモジュールの一つです。
    詳しいことはPHPの公式ページをみていただければわかるので省略します。
    簡単にいうとデータベースに接続するために使用する道具です。

    なぜPDOを使用してデータベースに接続するのか

    PHPでデータベースを接続するには他にも方法があります。
    でも、最近使用されるのはPDOが多いと感じます。
    その理由はなんなのか。
    それはまずどのデータベースにも接続できる点です。
    これまで各データベースにそれぞれ独自のモジュールを使用する必要がありました。
    しかし、PDOを使用すればそれぞれに違うモジュールを使用することなく、同じようにクエリやデータの取得をすることができます。
    これがPDOが使用される大きな理由のひとつだと考えられます。実際には違う理由で使用している人もいるでしょうが。。
    ただ、いちいちたくさんのモジュールを覚える必要がなくなったのは大きいですよね。
    他にも自分だけが知ってるメリットがあるならぜひ教えて欲しいです。

    データベースに接続してみよう

    では、データベースに接続してみましょう。
    データベース接続するのは簡単です。

    $pdo = new PDO("mysql:host=localhost; dbname=test; charset=utf8" , "pqtom" , "password");

    この一行でデータベースに接続することができます。簡単ですね。
    上記のコードは

    データベースの種類 MySQL
    ホスト localhost
    データベース名 test
    データベース内の文字コード UTF-8
    データベースを使用できるユーザー pqtom
    データベース接続のためのパスワード password

    このデータベースに接続するためのコードです。自分のデータベースに応じて必要なところは修正する必要がもちろんあります。

    注意点

    PDOを使用してのデータベースへの接続、すごく簡単でしたね。
    しかし、私PQTomはこれをするだけにすごく時間を取られました。なぜか。
    それはコードのこの部分

    "mysql:host=localhost; dbname=test; charset=utf8"

    なんともないコードですよね。では

    "mysql:host = localhost; dbname = test; charset = utf8"

    これでコードが動くでしょうか。正解は動きません。
    正確には動くのですが、認識が変わって接続できません。
    空白は一つの文字と認識されてしまうので接続ができなくなってしまいます。

    あともうひとつ。これは問題点ではなく、参考にですが

    mysql:host=localhost;

    の部分。
    localhostはIPで入力しても特に問題はありません。
    たとえば

    mysql:host=127.0.0.1;

    こんな感じでね。もしmysql:host=localhost;で動かなかったら試してみてね。

    まとめ

    今回PHPのPDOでデータベースに接続することについて話しました。
    本当に簡単なことですが、些細なことで混乱してしまうこともあります。
    コーディングする時は一つ一つ注意してみることが大事ということをつくづく感じさせられました。笑
    余分な時間を取られないために簡単なミスは無くしていきたいですね。

    本当であればPHPとはなにか、プログラミングについての基礎知識とかを先に話さなければならないところですが、今回最近起きた無駄な時間ベスト3くらいに入ることだったので先に書きました笑。
    これからも最新の気になったことについて書いていきますが、できる限り、順序よく書けていければと思います。

    今日はこのへんで。
    ではでは。