PDO 入門(データベース接続まで)

カテゴリ: PHP

記事投稿日: 2017年3月1日



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'';

いったん接続したあとは、どのデータベースにおいても同じ書き方で使うことができます。

以上です。








コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA




トップに戻る