PDO は、PHP に用意されているデータベース接続クラスです。
SQL インジェクション攻撃に対する最大の防御ですので、これを使うことはデータベース管理において必須です。
※ SQL が得意な人は、SQL を書きたがるかも知れませんが、ウェブの世界ではセキュリティレベルを下げるだけですので、やめましょう。
PHP のフレームワークの多くは、独自の PDO ラッパー(PDO を使いやすくしたライブラリ)を使っています。
どのライブラリを使うにしても、データベースの管理に関する考え方、初期設定は変わりません。
この記事が初心者の方の入門の手引きになれば幸いです。
PDO とは
- PHP 5.1 以降に標準で利用可能。
- 「PHP Data Objects」(データベース接続クラス)の略
- パラメータに手動でクオートする必要がなくなる
- SQL インジェクション攻撃から保護する助けになる(プログラム側で出来る最大の防御である)
PDO の機能
- どのデータベースを使っているかを隠蔽する
- 異なるデータベースを利用する場合でも、同じ関数を使うことができる
- 将来データベースを変更することがあっても、PDO オブジェクトを作成する時に指定したパラメータ(接続設定のこと)だけを変更すれば対応できる
- プリペアドステートメントを使うことでキャッシュが有効になる
- ドライバがクライアントまたはサーバー側にクエリプランやメタ情報をキャッシュさせるよう調整
- アプリケーションのパフォーマンスが最適化される
PHP で PDO を使うための初期設定
php.ini の下記がコメントアウトされていればOK
extension=php_pdo.dll
extension=php_pdo_mysql.dll
extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll
以下、4ファイルが拡張モジュールディレクトリ(エクステンションディレクトリ)に含まれていればOK
php_pdo.dll
php_pdo_mysql.dll
php_pdo_pgsql.dll
php_pdo_sqlite.dll
接続設定
設定ファイルを作っておくと、管理しやすい
define("DB_SERVER", "localhost"); // DBサーバ
define("DB_NAME", "test"); // DB名
define("DB_ID", "root"); // 接続ID
define("DB_PASS", ""); // 接続パス
接続文字列
// MySQL の場合
$dsn = 'mysql:dbname='.DB_NAME.';host='.DB_SERVER.';charset=utf8';
// SQLite の場合
$dsn = 'sqlite:d:??sqlite??test';
// MSSQL の場合
$dsn = 'sqlsrv:server='.DB_SERVER.';Database = '.DB_NAME.'';
// PostgreSQL の場合 (PostgreだけIDとPASSまで記述できる)
$dsn = 'pgsql:dbname=='.DB_NAME.' host=='.DB_SERVER.' port=3306 user='.DB_ID.' pass='.DB_PASS'';
いったん接続したあとは、どのデータベースにおいても同じ書き方で使うことができます。
以上です。
コメント