PDO(PHP Data Objects)はPHPに標準搭載されているデータベースアクセス抽象化ライブラリです。 データベースの違いを吸収し、共通の関数でデータベースを操作することを可能にしています。
PDOでデータベースと接続するときは、クラスのインスタンス化と同様の手段で行います。
$PDOのオブジェクト = new PDO('DNS文字列', 'DBユーザー名', 'DBパスワード');
mysql:dbname=データベース名;host=ホスト名;port=ポート番号
上記のデータベースに接続する場合、
<?php $pdoObject = new PDO('mysql:dbname=testbase;host=localhost;port=8889', 'testuser', 'pass');
<?php $pdoObject = new PDO('mysql:dbname=testbase;host=localhost;port=8889', 'testuser', 'pass'); //接続 unset($pdoObject); //接続解除
ここではPDOのprepareメソッドを使ってSQL文を実行する方法を紹介します。
例:
<?php $pdoObject = new PDO('mysql:dbname=testbase;host=localhost;port=8889', 'testuser', 'pass'); $pdoStatementObject = $pdoObject->prepare("SELECT * FROM user WHERE id = ?");
例:
<?php $pdoObject = new PDO('mysql:dbname=testbase;host=localhost;port=8889', 'testuser', 'pass'); $pdoStatementObject = $pdoObject->prepare("SELECT * FROM user WHERE id = ?"); $pdoStatementObject->execute(array('uteam')); //idがuteamだった場合 $pdoStatementObject->execute(array('uhero')); //idがuheroだった場合
例:
<?php $pdoObject = new PDO('mysql:dbname=testbase;host=localhost;port=8889', 'testuser', 'pass'); $pdoStatementObject = $pdoObject->query("SELECT name FROM user");
例:
<?php $pdoObject = new PDO('mysql:dbname=testbase;host=localhost;port=8889', 'testuser', 'pass'); $count = $pdoObject->exec("DELETE FROM user WHERE name = '山田'"); echo $count . '行削除されました。';
<?php $pdoObject = new PDO('mysql:dbname=testbase;host=localhost;port=8889', 'testuser', 'pass'); $pdoStatementObject = $pdoObject->prepare("SELECT name,address FROM user WHERE id = ?"); //IDに重複は無いとする。 $pdoStatementObject->execute(array('uteam')); //idがuteamだった場合 $row = $pdoStatementObject->fetch(); echo $row['name'];//IDに重複がなければ、IDに対応するカラム名nameの値が取得可能
<?php $pdoObject = new PDO('mysql:dbname=testbase;host=localhost;port=8889', 'testuser', 'pass'); $pdoStatementObject = $pdoObject->query("SELECT name,address FROM user"); while ($row = $pdoStatementObject->fetch()){ //実行した行は削除されていくため、nullになるまでループする。 echo $row['name']; }
<?php $pdoObject = new PDO('mysql:dbname=testbase;host=localhost;port=8889', 'testuser', 'pass'); $pdoStatementObject = $pdoObject->query("SELECT name,address FROM user"); $rows = $pdoStatementObject->fetchAll(); foreach ($rows as $row){ echo $row['name']; }
<?php $pdoObject->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
<?php try { //PDOはtry~catch構文の内側で実行します。 $pdoObject = new PDO('mysql:dbname=testbase;host=localhost;port=8889', 'testuser', 'pass'); $pdoObject->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { echo '接続に失敗しました: ' . $e->getMessage(); }