『PDO』データベース接続クラスについて
PDOクラスを使うメリット
データベース(以下DBと略)に接続する関数は以下3行で書いていました。
mysql_connect('サーバ名','ユーザ名','パス')or die(mysql_error()); mysql_select_db('データベース名'); mysql_query('文字コード');
これでも充分接続に問題はないのですが、複数のDB(MySQLやPostgreSQLやSQLiteなど)に接続する場合はそれぞれのDBに応じた関数をつけなければいけませんが『PDO(PHP Data Object)』で接続するクラスを設定すれば容易*1になります。
PDOの設定
PDOはPHP標準機能ですので、特別機能拡張としてインストールなどはする必要はありませんが、もしPDOが動かない場合はphp.iniを編集する必要があります。
C:\xampp\php\php.ini の950行目(PHPのバージョンにより儀行番号が異なる場合があります。)
extension=php_pdo.dll extension=php_pdo_mysql_libmysql.dll extension=php_pdo_sqlite.dll
行頭の";"(セミコロン)を削除します。
PDOによるDB接続
<?php try{ $server = "サーバ名"; $user = "ユーザ名"; $pass = "パスワード"; $database = "データベース名"; // MySQLサーバへ接続 $dbh = new PDO("mysql:host=" . $server . "; dbname=".$database, $user, $pass ); } catch(Exception $e ) { print 'ただいま障害により大変ご迷惑をお掛けしております。'; exit();
PDOでDBにデータ書込
まず、ここで新しくでる演算子『->』はオブジェクトやクラスのメソッドやフィールド変数を参照するための演算子です。
見た目が似た『=>』がありますが、こちらは配列に値を代入する演算子ですので。
『->』はアウトプット。『=>』はインプットするもので違いがあります。もっとも引き出す親元の型が違いますが。
話を戻しまして、
先述のPDOで実際DBにSQL文を送るにはqueryメソッドやprepar,executeメソッドと『->』演算子を使用します。
queryメソッド(1回限りの文を発行する)
1回だけ使用するようなSQL文をDBへ送信するにはPDOクラスで用意されている「query」メソッドを使います。
インスタンス化して変数$dbnに入れたのでここから
文字コード設定のコマンドを打ちます。
$dbh-> query('SET NAMES UTF8'); オブジェクト = $pdo->query('実行するSQL文');
prpareメソッドとexecuteメソッド
SQL文の基本部分が同じで値だけ異なるような場合*2は
「prepare」メソッドを使用します。
「prepare」メソッドはSQL文を発令する前段階の準備みたいなもので,その次に出る「execute」メソッドで初めてSQL文を発行します。
$sql = 'INSERT INTO my_staff(name,password) VALUES(?,?)'; $stmt = $dbh -> prepare($sql); //prepare()でSQL文を用意。 $data[] = $staff_name; $data[] = $staff_password; //$date配列に登録データを代入。 $stmt -> execute($data); //execute()でSQL文を発行。
prepareメソッド、executeメソッドは本来
SQLインジェクションから防ぐため安全にSQLを処理をするためのコードです。
以上のスクリプトが一通り終了すればDB接続も切断されますが、明示的にちゃんと接続を遮断するためにNULLをPDOクラスのオブジェに使用します。
$dbh = null;