PHPはデータベースと親和性が高い言語です。あらかじめ、データベースを扱うための仕組みが内蔵されています。
MySQLをはじめ、さまざまなデータベースと接続することができます。
その仕組みがPDOです。
PDOとは?
PDOは「PHP Data Objects」の略で、PHPをさまざまなデータベースに同じような方法で接続できる仕組みです。
PHP5.1以降、標準で対応しています。
PDOの O は Objects です。つまり、いくつかのクラスから成り立っているオブジェクト指向のデータベース接続方法ですので、まずはインスタンスをnew で作る必要があります。
その方法は以下のように行います。
1 |
変数 = new PDO(データソース,ユーザ名,パスワード); |
MySQLでの接続
PDOインスタンスを生成する際のデータソース部分は各データベースによって書き方が異なります。
MySQLの場合、以下のように書きます。
1 |
mysql:dbname=データベース名; host=ホスト名 |
hostが同じコンピュータの場合、省略も可能です。
例えばデータベース名が hanbai の場合、以下のように書きます。
1 |
$db = new PDO("mysql:dbname=hanbai","ユーザ名","パスワード"); |
SQLの実行
PDOにおいてもデータベースを扱うための命令はSQLを使います。
SQLを使うには、まずPDOオブジェクトのprepareメソッドでSQLを使うための準備を行います。
例えば、shouhinテーブルが全ての項目を取得するSQLを用意します。
1 |
$sql = $db->prepare( 'SELECT * FROM shouhin'); |
prepareメソッドを実行するとPDOStatementクラスのオブジェクトが返されます。
ただし、prepareメソッドを実行しただけではSQLは実行されたわけではありません。
SQLを実行するには返されたPDOStatementクラスのexecuteメソッドを実行します。
1 |
$sql->execute(); |
結果の取り出し
SELECT文などの場合、実行した結果を取り出さなくてはなりません。
この場合、PDOStatementクラスのfetchメソッドで結果を一行文取り出すことができます。
1 |
$data = $sql->fetch(); |
取り出した変数は列名の連想配列となっています。
例えば name という列があった場合、以下のように表示できます。
1 |
echo $data['name']; |
fetchメソッドでは一行文しかデータを取得できないため、全データを取得する場合 fetchAll メソッドを使います。
これは行の配列となっています。
1 2 3 4 5 |
$all = $sql->fetchAll(); foreach ($all as $data) { echo $data['name']; } |
まとめ
ここまでのコード、shouhinテーブルの name 列を表示する方法をまとめます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$db = new PDO("mysql:dbname=hanbai","ユーザ名","パスワード"); $sql = $db->prepare( 'SELECT * FROM shouhin'); $sql->execute(); $all = $sql->fetchAll(); foreach ($all as $data) { echo $data['sname']; } $sql = null; // オブジェクトの開放 |