PHP資料一覧
更新日:2009/3/3
対応ソフトウェア:PHP 5.2.9
PHPでDBにアクセスするにはPDO(PHP Data Objects)を使用する。
以下、簡単なサンプルとともに説明する。
例外処理定義
まずDBアクセス時にエラーが起きた場合の例外処理を定義しておく。
try
{
<<<DBアクセス処理を記述>>>
}
catch (PDOException $e)
{
var_dump($e->getMessage());
}
エラーが起きるとPDOExceptionオブジェクトが生成されるのでこれを補足してgetMessageメソッドをコールすることによりエラーメッセージを取得する。
以下、実際のDBアクセスについて説明する。
DB接続
以下の引数をPDOに与えてハンドルを生成する。
DSN(データベースのデータソース名)
データベースにアクセスするユーザ名
上記ユーザのパスワード
PDOのオプション
例) SQLiteの場合
$dsn = "sqlite:/tmp/test.db"; $user = null; $password = null; $pdo = new PDO($dsn, $user, $password);
例) MySQLの場合
$dsn = "mysql:host=localhost, dbname=test.db"; $user = "root"; $password = "*******"; $pdo = new PDO($dsn, $user, $password);
テーブル作成
クエリ文字列を生成し、PDO::queryメソッドをコールする。
ここでは以下のようなスキーマ定義を持つテーブルを作成する。
テーブル名
property
持ち物リスト
カラム
name (text)
持ち物名
num (integer)
個数
この場合、コードは以下のようになる。
$query = "CREATE TABLE property(name text primary key, num integer)"; $pdo->query($query);
データ挿入
PDO::prepareメソッドによりPDOStatementオブジェクト(ステートメントハンドル)を生成し、PDOStatement::bindValueメソッドで各カラムにデータを割り付けた後にPDOStatement::executeメソッドを実行する。
ここでは上記で作成した持ち物リストテーブルに以下のデータを挿入する。
iPhone
1台
Wii
1台
LoveLetter
30枚
この場合、コードは以下のようになる。
$name_list = array("iPhone", "Wii", "LoveLetter");
$num_list = array(1, 1, 30);
$query = $pdo->prepare("INSERT INTO property(name, num) VALUES(:name, :num)");
for($i = 0; $i < count($name_list); $i++)
{
$query->bindValue(':name', $name_list[$i]);
$query->bindValue(':num', $num_list[$i]);
$query->execute();
}
PDOStatementオブジェクトを使用し終わったらnullをセットしてオブジェクトを開放する。
$query = null;
データ読み出し
PDO::queryメソッドによりステートメントハンドルを生成し、PDOStatement::fetchメソッドでデータを読み出す。
上記で挿入したデータを取り出してみる。
$select = $pdo->query("SELECT * FROM property");
while($row = $select->fetch(PDO::FETCH_ASSOC))
{
echo implode("|", $row) . "\n"; // 各カラムを"|"で連結
}
$select = null;
結果は以下のようになる。
iPhone|1 Wii|1 LoveLetter|30
DB切断
PDOオブジェクトにnullをセットしてオブジェクトの開放、つまりDBからの切断を行う。
$pdo = null;
まとめ
上記のコードをまとめると以下のようになる。
try
{
//
// DBハンドル生成
//
$dsn = "sqlite:/tmp/test.db";
$user = null;
$password = null;
$pdo = new PDO($dsn, $user, $password);
//
// テーブル作成
// < テーブル定義 >
// - テーブル名:property ........ 持ち物リスト
// - カラム :name (text) ..... 持ち物名
// :num (integer) ... 個数
//
$query = "CREATE TABLE property(name text primary key, num integer)";
$pdo->query($query);
//
// データ挿入
//
$name_list = array("iPhone", "Wii", "LoveLetter");
$num_list = array(1, 1, 30);
$query = $pdo->prepare("INSERT INTO property(name, num) VALUES(:name, :num)");
for($i = 0; $i < count($name_list); $i++)
{
$query->bindValue(':name', $name_list[$i]);
$query->bindValue(':num', $num_list[$i]);
$query->execute();
}
$query = null;
//
// データ読み出し
//
$select = $pdo->query("SELECT * FROM property");
while($row = $select->fetch(PDO::FETCH_ASSOC))
{
echo implode("|", $row) . "\n"; // 各カラムを"|"で連結
}
$select = null;
//
// DB切断
//
$pdo = null;
}
catch (PDOException $e)
{
var_dump($e->getMessage());
}
関連情報(Google検索)
