北辞郎でサーバのPHPのバージョンを上げようと思っているのですが、そのためにはSQLiteのバージョンも上げる必要があります。PHPの5.3からSQLiteのバージョンが3になっているためです。SQLiteのバージョン2と3のデータベースは互換性がないので、まずデータベースを変換する必要があり、次にDB周りのコードをすべて書き直さなければなりませぬ。10年くらい前からつぎはぎしているコードなので、こういうことが起きると大規模改修を敢行することになります(ノД`)
まずデータベースの変換ですが、Stack OverflowのHow to convert sqlite2 to sqlite3 and what are the differences between both versions?にあるように、コマンドラインから「sqlite OLD.DB .dump | sqlite3 NEW.DB」とやれば、バージョン3の形式に変換することができます。バージョン2だと90MBくらいだったデータベースファイルがバージョン3では50MBくらいになります。ちょっと感動。
次にコード周り。この作業は現在進行中なのですが、PDOを使って古いコードを書き直すことにしました。sqlite_open → new PDO とかに書き換えていきます。ここで気になったのがPDOのコンストラクタ。これ、ちょっとひどくないですか。
<?php
$dbh = new PDO('sqlite:./dbdir/hoge.db');
?>
引数としてファイルのパスを取るのは分かりますが、パスにデータベースの種類を表す接頭辞を付ける必要があります。sqlite:とかmysql:を頭に付けるのです。なぜ引数を分けない……。パスを指定する際に、文字列連結しないといけなくてすごく面倒。
おかげさまでエラーメッセージが表示され、原因を究明するのにえらいこと時間がかかりました。こんな調子で作業を完了できるのだろうか。