SQLite3に切り替えた
2009年6月18日
今まで、SQLite2で書いてきたが、SQLite3に移行することにした。理由は、次のとおり。
以下のテストスクリプトを実行してみた。
実行結果は、次のとおり。
SQLite 2では、エラーがあってもPDOStatementが空の状態で作成される(fetch()メソッドの戻り値がfalse)。これでは、デバッグの効率が非常に悪い。
sqlite2→sqlite3変換には、SQLiteManagerを利用した。新たにsqlite3でデータベースを作成し、sqlite2からエクスポートしたクエリを、新しいデータベースで実行しただけ。
ところで、このSQLiteManagerは良くできていて、SQLite特有なことで分からないことがあれば、これに聞いてみると大体分かる。一つ前の記事のコメントにつけたが、ユーザー関数の定義方法が分からなかったが、SQLiteManagerを使うことで解決した。
以下のテストスクリプトを実行してみた。
<?php $sqlite2=new pdo('sqlite2::memory:'); $sqlite2->prepare('This is an error query.'); print_r($sqlite2->errorInfo()); $sqlite3=new pdo('sqlite::memory:'); $sqlite3->prepare('This is an error query.'); print_r($sqlite3->errorInfo());
実行結果は、次のとおり。
Array ( [0] => 00000 ) Array ( [0] => HY000 [1] => 1 [2] => near "This": syntax error
SQLite 2では、エラーがあってもPDOStatementが空の状態で作成される(fetch()メソッドの戻り値がfalse)。これでは、デバッグの効率が非常に悪い。
sqlite2→sqlite3変換には、SQLiteManagerを利用した。新たにsqlite3でデータベースを作成し、sqlite2からエクスポートしたクエリを、新しいデータベースで実行しただけ。
ところで、このSQLiteManagerは良くできていて、SQLite特有なことで分からないことがあれば、これに聞いてみると大体分かる。一つ前の記事のコメントにつけたが、ユーザー関数の定義方法が分からなかったが、SQLiteManagerを使うことで解決した。