つゆだくSQLite

3

 
 
メールを管理人に送信
メールアドレス:
コメント:
*書いた内容は公開されません

メニュー

トップページ
SQLite3トップページ
JavaScript(AJAX)トップページ
SQLite3
SQLiteのおすすめ書籍
ご意見ご要望
スポンサードリンク

PHP5でSQLiteに接続

準備

PDO(PHP Data Objects), SQLiteのPDOドライバのインストール
  • PHP5.1の場合

    PHP5.1では標準でバンドルされているので、普通にコンパイルすれば使えるはずです。コンフィグオプションは以下の4つが影響します。

    $ ./configure --with-zlib \
                  --enable-pdo=shared \
                  --with-pdo-sqlite=shared \
                  --with-sqlite=shared
    
  • PHP5.0の場合

    PHP5.0ではPDO, PDO_SQLITEを別途インストールします。

    $ pear install pdo
    $ pear install pdo_sqlite
    
  • PHP5共通

    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

アクセス権限がないので、データベースに接続できないというエラーが正しくかえってきています。