PHP サーバサイド

[PHP] よくあるDB接続設定

PHPでMySQLに接続する設定は最近のフレームワークでは隠蔽されていて特に考えなくても大丈夫になっていますが、生のPHPではどう言う風に設定するかをまとめてみました。

接続する処理


サンプルコード

説明

接続のパラメーター

DBにアクセスするのに必要な情報は以下の通り

  • ホスト名: DBが建っているサーバのIP
  • ポート名: サーバでDBを建てているポート番号
  • データベース名: アクセスするスキーマ情報
  • ユーザ名: アクセスするユーザ情報
  • パスワード: 上記のユーザ名で上記のデータベース名にアクセスするために必要なパスワード

これらを定数として定義しておく

接続際のオプション

デフォルトではエラー時に例外を出さなかったり、取得したデータが少々扱いずらかったりするので、その手間を省く設定を行う

自分がよく行う設定は以下の通り

  • PDO::MYSQL_ATTR_INIT_COMMAND(接続時に実行されるコマンド) => "SET CHARACTER SET 'utf8'" (文字コードをutf8にする)
  • PDO::ATTR_ERRMODE(エラー時の処理) => PDO::ERRMODE_EXCEPTION(例外を出す)
  • PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC(カラム名をキーとする連想配列)

これを以下のように定義

PDO(php database object)でデータベース接続を行う

phpではPDO(php dabase object)と言うクラスがあり、これに上記のパラメータを渡してインスタンスを作ると自動でDBに接続したインスタンスが返ってくる。

でも、接続に成功するかどうかはDBのサーバの状態(もしかしたら、落ちているかもしれないので)例外処理も書いた方が良い

クエリを実行する処理


サンプルコード

説明

クエリを設定する

PDOオブジェクトにはprepareと言う実行するクエリの情報を返すメソッドがある

これを使って、SQL文をセットする

クエリを実行する

実行した文情報はPDOStatementクラスのインスタンスを返す。

このクラスにはexecuteと言うセットされたSQL文を実行するメソッドがある。

これを使って、SQL文を実行する。

また、WHERE区などでパラメータを指定したい場合は以下のようにする

クエリの結果を取得する処理


サンプルコード

説明

PDOStatementオブジェクトのfetchとfetchAll

PDOStatementオブジェクトにはfetchとfetchAllと言うどちらも取得した結果を返すメソッドがある。

取得した結果は上記のPDOインスタンスを立ち上げる際のオプションで指定した通りにカラム名を指定した連想配列になっている。

fetchは取得したデータを一軒ずつ取得する、実行する度に次のデータが返却される

fetchAllメソッドはデータをまとめて返却する。

取得したデータをそのまま配列に格納したい場合はfetchAllを使い、取得したデータを解釈し、独自の処理を加えたい場合はfetchで一件ずつ取得するのが望ましい。

まとめ


DBからデータを取ってくるたけでも、

  • PDOインスタンスを作る
  • SQL文をセットしてPDOStatementインスタンスを作る
  • SQL文を実行する
  • 実行した結果を取得する

の流れを覚えておく必要があり、意外と大変だと感じるだろう。

最近のフレームワークではこうしたことを考えずにデータを直感的に取得できるようになっている。(それが良いことかどうかは分からないけど)

最後に全体のソースを載せて締めにしよう

-PHP, サーバサイド
-,

© 2021 Shiro's secret base