Webシステムの開発に適したPHPは、DB接続を利用しやすいプログラム言語です。もしPHPでDBに接続するプログラムを作るなら、ぜひPDOクラスの利用を検討してください。今回は、PDOを使ったPHPからDBに接続する方法について紹介します。
目次
PHPでDBに接続するには
PHPは、Webシステムの開発に向いたプログラム言語で、多くのシステム開発で利用されています。そして、PHPにはいろいろなメリットがありますが、SQLデータベースに接続し易い点はメリットの中でも最大でしょう。
では、どのような点がメリットなのでしょうか。次から、PHPとDBの関係について解説します。
PHPはDB接続に向いている
PHPは、Webサーバーで使われるプログラム言語の中でも、SQLデータベースを活用した情報システムを作り易いプログラム言語です。
なお、今はいろいろなフレームワークがあり、それらを活用すれば、他のプログラム言語でもSQLデータベースを利用できます。その点PHPは、フレームワークを利用しなくても、標準でSQLデータべースにアクセスできる関数が使えます。
さらに、PHPでは、DB接続の使い易さを考慮したPDOクラスが標準で利用できます。そのため、覚えることの多いフレームワークを使わなくとも、使い易いPDOクラスを活用し、DBを利用したWebシステムが作れる点も大きなメリットです。
PHPでDBに接続するには
PHPは、Web開発でよく利用されるプログラム言語ですが、PHPそのものにはSQLデータベースに接続する機能はありません。PHPでSQLデータベースに接続するためには、専用のモジュールを組み込む必要があります。
なお、CentOSやUbuntuなどのLinuxディストリビューションに組み込まれているPHPは、yumコマンドやaptコマンドで、簡単に専用モジュールを組み込めます。
もし、LinuxのPHPでDBに接続する場合は、専用モジュールがインストールされているかチェックしてください。
DB用モジュールの準備
例えば、CentOSやUbuntuなどのLinuxでよく使われるオープンソースのSQLデータベースであるmariadbやpostgreSQLをPHPから利用するには、次のモジュールが必要です。
- mariadb用モジュール:php-mysql
- postgresql用モジュール:php-pgsql
さらに、Oracle Databaseや、Microsoft SQL serverなど有償のSQLデータベースをPHPから利用する場合も、PHP側に専用のモジュールを組み込む必要があります。
CentOSならyumコマンドで、またUbuntuならaptコマンドを使えば、PHPに組み込めるモジュールの一覧を表示したり、モジュールを指定してインストールすることが可能です。
もし、SQLデータベースの接続に必要なモジュールがインストールされていない場合は、yumコマンドやaptコマンドを利用してインストールしてください。
PDOの基本
PHPは、SQLデータベースソフト毎のモジュールを組み込むと、そのDBを利用する専用の関数も同時に組み込まれます。しかし、今は、個々のDB専用の関数を利用するのではなく、PDOクラスを利用して接続するのが一般的です。
次から、PDOの基本について解説します。
そもそもPDOとは何?
今回紹介するPDOとは、PHP Data Objectの略で、PHPの中からデータベースにアクセスするためのインターフェイスを提供する拡張モジュールです。そして、最新のPHPには標準で組み込まれているので、PHPをインストールすればすぐに利用できます。
PDOのメリットは、接続するSQLデータベースに関係なく、共通のインターフェイスが使える点です。ただし、先ほども説明したように、そのDB専用のモジュールを組み込んでいないと利用できないので注意してください。
PDOはプリペアドステートメントが使える
最近のWebシステムから利用するSQLでは、プリペアドステートメントが使われています。そして、PDOを利用することで、プリペアドステートメントも利用可能です。ぜひ、PHPによるDB接続にPDOを活用し、Webシステムの開発にプリペアドステートメントを利用してください。
なお、プリペアドステートメントとは、実行したいSQLのテンプレートのようなものを用意し、後からパラメータ変数を指定してSQLを合成し、そのSQLを実行する方法です。そして、プリペアドステートメントを利用することで、複雑なSQLを安全に編集できたり、SQLインジェクション攻撃に対する対策としても使われます。
PDOのエラー処理に注意を
先ほど説明したように、PHPの標準で組み込まれており、プリペアドステートメントでも活用できるPDOですが、安全に使うためにはエラー処理に注意が必要です。
PDOは、処理中にエラーやワーニングが発生した場合、その内容に合わせたエラーコードを発行し、それをスローします。そのスローされたエラーコードは、try~catchの仕組みで受け取れるので、適切に処理するプログラムを作っておきましょう。
PDOを使ったDB接続例
これまで説明したように、PHPでDBに接続する場合は、PDOを使うと便利です。しかし、PDOを使ったDB接続の方法が解らない、という方もいるでしょう。
次から、PDOからSQLデータベースのmariadbに接続する例を使い、PHPにおけるDB接続の書き方について解説します。
PDOをインスタンスする文法
PDOクラスを利用するには、newコマンドでインスタンスする必要があります。そして、インスタンスする際、接続するデータベースやアカウントなどの指定が必要です。次に、PDOをインスタンスする際の文法と使用例を紹介します。
PDOをインスタンスする文法
new PDO( DSNの文字列, アカウント名, パスワード, ドライバーオプション )
DSNの文字列には、利用するデータベースソフト、接続するデータベース名、データベースが稼働しているサーバー、ポート番号などを記述します。(例:mysql:dbname=test;host=localhost)
そして、アカウント名は、データベースに接続する際のアカウント名を指定します。また、パスワード名はアカウント名に対応したパスワードです。最後のドライバーオプションは、利用するデータベースソフトに応じて使用します。
PDOをインスタンスする例
次に、PDOを利用してデータベースに接続する例を紹介します。
1 2 3 4 5 6 7 8 9 10 11 |
<?php $dsn = 'mysql:dbname=test;host=localhost'; $user = 'user'; $passwd = 'passowrd'; try { $dbh = new PDO($dbh, $user, $paswd); } catch (PDOException $e) { echo "DB access ERROR: " . $e->getMessage() . "\n"; exit(); } ?> |
この例では、localhostで稼働しているmysqlのデータベースtestに接続する例です。なお、データベースソフトとして、mysqlが指定されていますが、mariadbにも接続できます。そして、mariadbに接続するアカウントがuserで、対応するパスワードがpasswordです。
また、先ほど説明したようにPDOのエラー処理のためにtry~catchの中で、newコマンドを使い、PDOをインスタンスしています。
まとめ
今回説明したように、PHPには、DBに接続するPDOクラスがあり、これを利用することでデータベースを活用したWebサービスを簡単に作れます。
さらにPDOクラスを利用することで、プリペアドステートメントを利用したセキュリティ対策が取られた安全なWebサービス作成も可能です。ぜひ、PDOを利用してDBに接続したPHPのプログラムを作ってみてください。