[PHP] PDOのコンストラクタって

Pocket

北辞郎でサーバの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:を頭に付けるのです。なぜ引数を分けない……。パスを指定する際に、文字列連結しないといけなくてすごく面倒。

おかげさまでエラーメッセージが表示され、原因を究明するのにえらいこと時間がかかりました。こんな調子で作業を完了できるのだろうか。

コメントする

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください