PDOお試し中
概要だけは知っていたけど、実際に使うのは多分初めて。PEAR::DB
と同じような感覚で使えて良い感じです。
PDO
でのエラー処理は try
~ catch
で捕捉するのが定番みたいですが、PEAR::DB
みたいに戻り値のチェックで処理することもできるのですね。
PHP Labo のプログラムは非オブジェクト指向(手続き型)で書くので、エラー処理も昔ながらの方法にしようかなぁ…。その場合、こんな感じ?
<?php
try {
$pdo = new PDO(
'mysql:dbname=phpdb;host=localhost',
'user',
'pass',
array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT
)
);
} catch (PDOException $e) {
exit($e->getMessage());
}
$stmt = $pdo->query('SELECT * FROM address');
if (!$stmt) {
list($state, $code, $message) = $pdo->errorInfo();
exit($state . ':' . $code . ':' . $message);
}
while ($data = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $data['no'] . ':' . $data['name'] . "<br>\n";
}
?>
コンストラクタのエラーは try
~ catch
でしか補足できなかった。他に方法が無いか、後でもう少し調べてみます。でもやっぱり、データベースのエラーは全部 try
~ catch
で処理した方がスッキリ書けるかなぁ…。
今のところ使っていないけど、トランザクションを使う場合は特に便利だし。
また、SQLite2を使うかSQLite3を使うかで、コンストラクタに渡す値が微妙に異なります。うーん、設定ファイルでSQLite2、SQLite3、MySQLを切り替えるようにするかな。