データベース

PDO(PHP Data Object)とは、PHP標準(5.1.0以降)のデータベース接続クラスのことです。
PHPは標準でMySQLやPostgreSQLやSQLiteなど、色々なデータベースに接続するための命令が用意されています。データベースの種類によって条件分岐させて命令を呼び出せば、プログラムを複数のデータベースに対応させることもできます。
ですがPDOを使用していれば、同じ命令で複数のデータベースに接続ができるようになるので、さらに開発が容易になります。

データベースへの接続

データベースに接続するには、PDO(PHP Data Objects)というクラスを使います。
newという命令文でPDOクラスからPDOオブジェクトを生成します。
変数名 = new PDO(接続文字列, ユーザ名, パスワード)

例:$db = new PDO('mysql:host=localhost;dbname=sql_ex;charset=sjis', 'root', 'admin');
接続文字列(mysql:host=ホスト名; dbname=データベース名; charset=文字コード)
mysqlとDBの種類が記載されていますが、違うDBを使う場合そこを変えるだけです
対応しているDBは下記の通りです。

ドライバ名サポートされるデータベース
PDO_CUBRIDCubrid
PDO_DBLIBFreeTDS / Microsoft SQL Server / Sybase
PDO_FIREBIRDFirebird
PDO_IBMIBM DB2
PDO_INFORMIXIBM Informix Dynamic Server
PDO_MYSQLMySQL 3.x/4.x/5.x
PDO_OCIOracle Call Interface
PDO_ODBCODBC v3 (IBM DB2、unixODBC そして win32 ODBC)
PDO_PGSQLPostgreSQL
PDO_SQLITESQLite 3 と SQLite 2
PDO_SQLSRVMicrosoft SQL Server / SQL Azure
PDO_4D4D

PDOオブジェクトを解放すると、切断されます
例:$db = null;

SQLの実行方法

・パラメータがない場合
変数名(結果セット:PDOStatementオブジェクト) = PDOオブジェクト->query(SQL文);
例:$stmt = $db->query('select count(*) from address_list');

・ パラメータがある場合
SQL文の設定:
変数名(結果セット:PDOStatementオブジェクト)=PDOオブジェクト->prepare(SQL文);
設定するSQL文にパラメータ名を(:パラメータ名)設定する

パラメータの設定:
変数名(結果セット)-> bindvalue[バイドバリュー](:パラメータ名, 値, 型)
型の設定は、数値の場合のみ「PDO::PARAM_INT」と設定します

SQLの実行:
変数名(結果)= 変数名(結果セット)-> execute();

書き方例
           <?php
                $db = new PDO('mysql:host=localhost;dbname=sql_ex;charset=utf8', 'root', 'admin');
                $stmt = $db->prepare('select * from address_list order by ADDRESS_NO limit 10 offset :min ');
                $stmt->bindValue(':min', $viewLocMin, PDO::PARAM_INT);
                $stmt->execute();
            ?>
        

検索と結果表示

・検索結果が1件の場合

           <?php
                $db = new PDO('mysql:host=localhost;dbname=sql_ex;charset=utf8', 'root', 'admin');
                $stmt = $db->query('select name from address_list where address_no = 1');
                $result = $stmt->fetch();
                print($result['name']);
            ?>
        

fetch()で結果を連想配列に入れてくれます
また、PDO::FETCH_NUMを指定することで配列番号で取得することができます

           <?php
                $db = new PDO('mysql:host=localhost;dbname=sql_ex;charset=utf8', 'root', 'admin');
                $stmt = $db->query('select name from address_list where address_no = 1');
                $result = $stmt->fetch(PDO::FETCH_NUM);
                print($result[0]);
            ?>
        

・単一カラムを取得する場合

           <?php
                $db = new PDO('mysql:host=localhost;dbname=sql_ex;charset=utf8', 'root', 'admin');
                stmt = $db->query('select name from address_list where address_no = 1');
                $result = $stmt->fetchColumn();
                print($result);
            ?>
        

・検索結果が複数件の場合
パラメータ無し:

           <?php
                $db = new PDO('mysql:host=localhost;dbname=sql_ex;charset=utf8', 'root', 'admin');
                $stmt = $db->query('select name from address_list');
                while($result = $stmt->fetch()){
                    print($result['name']);
                }
            ?>
        

パラメータ有り:

           <?php
                $db = new PDO('mysql:host=localhost;dbname=sql_ex;charset=utf8', 'root', 'admin');
                $stmt = $db->prepare('select * from address_list order by ADDRESS_NO limit 10 offset :min ');
                $stmt->bindValue(':min', $viewLocMin, PDO::PARAM_INT);
                $stmt->execute();
                while($result = $stmt->fetch()){
                    print($result['name']);
                }
            ?>
        

「:(コロン)任意の名前」で指定した所がbindValueで設定値と入れ替わるというイメージです。
また、intの値の時はbindValueで設定する際にパラメータでPDO::PARAM_INTを付けておくと良いでしょう

行の挿入・削除・変更

検索のSQLと実行方法は変わりません
・行の挿入

           <?php
                $db = new PDO('mysql:host=localhost;dbname=sql_ex;charset=utf8', 'root', 'admin');
                $stmt = $db->prepare('INSERT INTO address_list(ADDRESS_NO, NAME, KANA, STATE_ID, ADDRESS, POSTAL_CODE, TELEPOHNE_NUMBER, PORTABLE_TELEPOHNE_NUMBER, MAIL_ADDRESS, OTHERS)VALUES(NULL, :value1,:value2,:value3,:value4,:value5,:value6,:value7,:value8,:value9)');
                $stmt->bindValue(':value1', $data_name);		// 名前
                $stmt->bindValue(':value2', $data_hurigana);		// カナ
                $stmt->bindValue(':value3', 13, PDO::PARAM_INT);	// 都道府県ID
                $stmt->bindValue(':value4', $data_address);		// 住所
                $stmt->bindValue(':value5', $data_post);		// 郵便番号
                $stmt->bindValue(':value6', $data_tel);			// 電話番号
                $stmt->bindValue(':value7', $data_tel2);		// 携帯番号
                $stmt->bindValue(':value8', $data_mail);		// メールアドレス
                $stmt->bindValue(':value9', $data_etc);			// その他
                $stmt->execute();

            ?>
        

・行の削除

           <?php
                $db = new PDO('mysql:host=localhost;dbname=sql_ex;charset=utf8', 'root', 'admin');
                $stmt = $db->prepare('delete from address_list where ADDRESS_NO = :dwlno');
                $stmt->bindValue(':dwlno', $delno, PDO::PARAM_INT);
                $stmt->execute();
            ?>
        

・行の変更

           <?php
                $db = new PDO('mysql:host=localhost;dbname=sql_ex;charset=utf8', 'root', 'admin');
                $stmt = $db->prepare('UPDATE address_list set NAME = :value1 where ADDRESS_NO = :value10');
                $stmt->bindValue(':value1', $data_name);		// 名前
                $stmt->bindValue(':value10',$inputno, PDO::PARAM_INT);	// アドレスNO
                $stmt->execute();
            ?>