|
このサイトで使用している XREA のサーバでは、Apache モジュール版の PHP4 と CGI 版の PHP4/5 が使えます。SQLite は本来 PHP5 からの対応ですが、XREA の仕様では PHP4/5 ともに SQLite2/3 が使えることになっています。
レガシー関数の sqlite_* 関数は PHP4/5 ともに使えましたが、SQLite2 のみで ACFinder の acis.db を sqlite_open() で開くことはできませんでした。
では、どうやって SQLite3 のデータベースを操作するかというと、PHP4 の場合は、PHP マニュアルには載っていない sqlite3_* 関数が別途用意されていました。これで問題なく acis.db を操作できますが、sqlite3_num_rows と sqlite3_field_name 関数が実装されていません(この2つは SQLite2 版も実装されていません)。field_name の方は検索結果を取得するときにハッシュのキーとして渡されるのでなくてもなんとかなりますが、num_rows がないのはちょっと辛いです。
PHP5 の場合は、元々 PDO モジュールで経由で SQLite3 データベースにアクセスするのが標準です。が、私の使用しているサーバでは、SQLite2 のドライバはインストール済みでしたが、残念ながら SQLite3 のドライバがインストールされていないようで、acis.db を操作することはできませんでした。とりあえずサポートに SQLite3 ドライバのインストールを要望中です。
PHP で SQLite を扱うときに優れているのは、sqlite 関数、PDO_SQLITE 関数とも create_function がサポートされていて、PHP のユーザ関数を簡単に SQLite の関数として登録できるところです。私が使用しているサーバの SQLite3 エンジンには REGEXP 関数が実装されていませんでしたが(MATCH 関数は実装されてますが恐らく全文検索用です)、下記のような感じで簡単に REGEXP 関数(もちろん演算子も)が使えるようになりました(ユーザ関数のパラメータの順番が不明だったのと、create_function のパラメータの順番がマニュアルと異なったので若干悩みましたが^^;)。
function _regexp($pattern, $target) {
return (int)(mb_eregi($pattern, $target) !== FALSE);
}
$db = sqlite3_open('acis.db');
sqlite3_create_function($db, 'regexp', 2, '_regexp');
|
|