とある事情で、MovableTypeのDBを直接いじる必要が生じたのだけど、
現在のDBはSQLiteで、GUI的にいじりづらい。

で、SQLiteManagerっていう管理ツールがSQLiteにもあるらしいので、
それを導入してみた。


公式サイトはこちら。

SQLiteManager : Web based tool to manage (administration) SQLite databases. - Accueil

まず、必要な条件は、PHP5。
PHP4では、動かないっぽい。

というわけで、今回は共有サーバ(さくらインターネット)ではなく、
ローカルのWindowsで動かしました。
ベースは、Apache2.0.59。


公式にある情報は、こんなところ。

PHP-5.1.2 mcrypt mysql mysqli PDO  ├ PDO_SQLITE  └ PDO_MYSQL

まぁでも、Apache2+PHP5入ってれば大体入ってるかと。

インストールは簡単。
落としてきたファイルを解凍して、任意の場所に置くだけ。

インストール後、アクセスしてみると早速このエラー。

The SQLite extension can't be loaded

これは何かと言うと、
phpで、sqliteのextentionが読み込めてない、ということ。
参考としては、こちら。

php.iniを開いて、extensionのところを見ると、php_sqlite.dllの行がコメントアウトされているので、これのコメントアウトを消す。これだけでも動くのかもしれないが、あるサイトによるとphp_pdo.dllを追加してやる必要があるっぽいので、これも入れて見る。そうしてApacheを再起動したら、無事に動いた。ちなみにphp.iniはセミコロンでコメントアウトになる。

PHP5.1以前はこんなことをしなくても動いたらしいが、現在はPHP5.2が最新版なのでこのような問題が生じたらしい。

 

これで、動くようになるのだけど、
次の問題は、DBが取り込めない。
きちんと、取り込んでるはずなのに、エラーが出る。

内容を見ると、
『POSTで送るにはてめーのファイルはでかすぎるんだよ!』
と言われてる様子。

というわけで、これまた、PHPの設定を変更する。
408行目くらいに、次の記述があるので、8Mを適当な数字に変更。

; Maximum size of POST data that PHP will accept.
post_max_size = 8M
 ↓
post_max_size = 20M

僕の場合、ファイルサイズが16M弱だったので、こんな感じ。

この設定で、無事に取り込めるようになるのだけど、
今度は、フィールドが表示されない。
なんだこれ?

調べてみたら、どうやら、DBの位置情報がおかしいんだそうだ。

解決方法は、こちらを参考に、

パス情報のバックスラッシュをstripslashes()されていて、気づくとドライブルートに\を抜かれた長いファイル名のDBが自動的に作られていた・・。つまり全然関係ないところに作られた、できたてDBの中身を見ていたわけで。どうりでテーブルが見えないわけだ。

対処法は、include フォルダ内の add_database.php の17行目あたり(後略…内容はリンク先へ)

 

SQLiteManagerのファイルを修正してやることで解決。


もし、UTF-8でDBを作ってたら、
SQLiteManagerの文字コードをUTF-8にした方が良いので、
この辺りも参考に。

SQLiteManager - EthnaWiki

(ひょっとして、1.2.0なら対応してるのかも?)

あと、使ってみて、GUIで変更すると、クエリで失敗することがあったので、
(なぜか、文字列がクオーテーションで囲まれなかった)
クエリ書いて、SQLで実行させた方が良いかも。

てか、それ出来るなら…プロンプトとかでやった方が早いか(苦笑)


いや、でも、GUIで確認できるのは、
僕みたいなプログラマじゃない人間にとっては十分に有用です。ええ。

スバラシイ。


各サイトに感謝。

■ 注釈

* とある事情

あるエントリにコメントをいただいたんだけど、なぜかそのエントリが、かぶって登録されていた。 メニューにも2つ表示されていて、コメントは両方についていた。 エントリ一覧で確認すると、エントリIDは違ったので、片方を削除したんだけど、 削除したらコメントも削除された…

というわけで、その復活のためにDBをいじったのであります。