つゆだくのSQLite
3
PHP5.1では標準でバンドルされているので、普通にコンパイルすれば使えるはずです。コンフィグオプションは以下の4つが影響します。
$ ./configure --with-zlib \
--enable-pdo=shared \
--with-pdo-sqlite=shared \
--with-sqlite=shared
PHP5.0ではPDO, PDO_SQLITEを別途インストールします。
$ pear install pdo $ pear install pdo_sqlite
php.ini に以下の行を追加
extension = pdo.so extension = pdo_sqlite.so
$ sqlite3 test.db ".schema t3" CREATE TABLE t3( a integer primary key autoincrement, b text not null );
カラム'a' はautoincrement にしています。
<?php
try {
// SQLiteにユーザ,パスワードは必要ないのでnullを指定
$dbh = new PDO('sqlite:./test.db', null, null);
$dbh->beginTransaction();
$sth = $dbh->prepare('insert into t3(b) values(?)');
$value = 'foo';
$sth->bindParam(1, $value, PDO::PARAM_STR, 256);
$sth->execute();
// autoincrementで入ったIDを取得
$lastInsertId = $dbh->lastInsertId();
print "lastInsertId: ". $lastInsertId. "\n";
$sth = $dbh->prepare('update t3 set b=? where a=?');
$value = 'bar';
$sth->bindParam(1, $value, PDO::PARAM_STR, 256);
$sth->bindParam(2, $lastInsertId, PDO::PARAM_INT);
$sth->execute();
$sth = $dbh->query('select a, b from t3');
$rs = $sth->fetch(PDO::FETCH_ASSOC);
print_r($rs);
$sth = $dbh->prepare('delete from t3 where a=:value');
$value = $rs[a];
$sth->bindParam(':value', $value, PDO::PARAM_INT);
// 削除した件数が戻る
$cnt = $sth->execute();
$dbh->commit();
print $cnt. "件削除しました。\n";
} catch (PDOException $e1) {
print $e1->getMessage()."\n";
try {
if ($dbh != null) {
$dbh->rollBack();
}
} catch (PDOException $e2) {
print $e2->getMessage()."\n";
}
}
$dbh = null;
?>
PDOに関しての詳しい説明は、PDO関数リファレンスを参照ください。http://jp2.php.net/pdo
$ php ./sqlite.php
lastInsertId: 1
Array
(
[a] => 1
[b] => bar
)
1件削除しました。
期待通りに動作しました。次はワザとエラーを発生させてみます。
$ chmod 000 test.db $ php ./sqlite.php SQLSTATE[HY000] [14] unable to open database file
アクセス権限がないので、データベースに接続できないというエラーが正しくかえってきています。