PHP

【PHP】PDOでMySQLに接続する方法。サンプルコード有

以前はPHPからデータベースに接続しようとするとMySQLであれば「mysql_connect」関数、PostgreSQLであれば「pg_connect」関数などと接続するデータベースに合わせて使用する関数を使い分ける必要がありました。
(データベース接続のSQL発行や結果の取得もデータベースごとに関数が設けられていました)

そのため、使用するデータベースが変更となると影響範囲がものすごいことになるという弱点がありました。

しかし、PDOクラスが登場したことにより「データベースが異なる場合でも同じ関数を使用することができる」ためデータベースの変更にも耐えれるようになりました。

今回はこのPDOクラスを使用してmySQLへの接続方法を紹介します。

PHPのPDOクラスとは

PDOとは「PHP Data Objects」の頭文字をとった名称です。

データベースの内容をPHPのオブジェクトのように扱えるようになるクラスになります。

PHPのPDOクラスでMySQLに接続するサンプルコード

いきなりですが、PHPのPDOクラスでMySQLに接続するサンプルコードを下記します。

ちなみにデータベースのテーブルは以下のようなものとします。

■テーブルの構成

■テーブルの内容

とりあえず上記のデータベースを作成し、コードを実行したらデータベースに接続し、データをSELECTする3パターンの結果が見れます。

では順番に見ていきます。

PHPのクラスでMySQLに接続する方法【接続部分】

MySQL部分の接続部分はサンプルコードの以下の部分になります。

 

ここでポイントになるのが、PDOクラスのインスタンスを作成する以下の部分。

サンプルコードはそれぞれを定数で宣言して指定しています。

これでデータベースへの接続は完了です。

将来的にデータベースが変更になった場合もDSNの部分を変更すればOKです。

注意点としてはデータベース接続時に例外が発生する可能性があるので、tyr、catchで囲む必要があるということですね。

それさえ注意すれば簡単にデータベースへの接続ができます。

PHPのクラスでMySQLに接続する方法【クエリ(SQL発行)】

クエリを発行するには大きく2種類の方法があります。

SQLが固定の場合:queryメソッド

SQLが固定(ユーザー入力などによってSQLの内容が変わらない)場合はサンプルコードの以下の部分がSQL発行にあたります。

返り値はPDOStatmentと呼ばれるオブジェクトで、SQLの結果などが格納されています。

SQLが可変の場合:prepareメソッド(パターン1)

SQLが可変(ユーザー入力などによってSQLの内容が変わる)場合は2パターンの方法があります。

まず1パターン目はSQLの可変部分を「?」で指定する場合です。

サンプルコードでは以下の部分になります。

  1. prepareメソッドでSQLを指定。SQLの可変部分を「?」とする
  2. prepareメソッドで返ってきたPDOステートメントのexecuteメソッドに「?」部分の値を配列で指定する

これでqueryメソッドを実行した状態と同じになります。

SQLが可変の場合:prepareメソッド(パターン1)

SQLが可変の場合の2パターン目はSQLの可変部分を「:キー値」で指定する場合です。

サンプルコードでは以下の部分になります。

  1. prepareメソッドでSQLを指定。SQLの可変部分を「:キー値」とする
  2. prepareメソッドで返ってきたPDOステートメントのbindValueメソッドでキー値に対応する値をセットする
  3. PDOステートメントのexecuteメソッドを実行する

これでqueryメソッドを実行した状態と同じになります。

PHPのクラスでMySQLに接続する方法【データ取得】

SQL発行(query、executeメソッド)を実行した後は、PDOステートメントのfetchメソッドを使用してデータを1行ずつ取得していきます。

サンプルコードの以下の部分です。

fetchメソッドの引数によってSQLでの取得結果が変わります。

サンプルコードの「PDO::FETCH_ASSOC」はカラム名がキー値となる連想配列で返ってきます。

この引数には色々ありますが、PHPの公式マニュアルを見てもよく分かりません。

以下のQiita記事に色々とまとまっているので、そちらを参照すると分かりやすいかと思います。
PDOフェッチパターン大全

INSERT、UPDATE、DELETEなどを行う場合

これはSELECTする場合と同じで、データがSQLが固定であればqueryメソッド、可変であればprepareメソッドを使用して発行すればOKです。

SELECTとの違いはSQL発行した後のfetch(データ取得)が不要というだけです。
(正しく更新できたかを確認するには、更新後のデータをSELECTする必要があります)

まとめ

いかがだったでしょうか。

今回はMySQLを例に紹介しましたが、PDOを使用すれば簡単にデータベースに接続することができます。

しかもデータベースが変更になっても接続部分のみを変更すれば良いという優れもの。

Webアプリを作成するためには必須の技術なので、しっかりと身につけておきましょう。

 

ABOUT ME
Jyu2
【PC1台で稼ぐブロガー兼Webエンジニアを目指し中】IT情報やWebサービス、アプリなどの情報を発信/SIerで10年以上勤務→ストレスMAXで休職中→ブログとWebの学習を行い脱サラ計画中/ #30DAYSトライアル 1st完了→2nd実施中 / 日々の学習内容をブログにアウトプット / まずは月収5万円を目指す