2010年9月26日日曜日

SQLiteManagerでレコードの削除ができない

他の環境では問題なく利用できていたSQLiteManagerで、なぜか新しく構築したCentOS5.4にて不具合が出ている。具体的には、レコードが削除できないという現象だ。

レコードの一覧表示において、各レコード行の左にある削除ボタンをクリックしても空白ページが表示されるだけで、レコードは削除されない。しかし、SQLの直接実行画面から"delete from..."とやると削除される。不思議だ・・・。

SQLiteのバージョンはsqlite-3.3.6-5(CentOSデフォルト)、SQLiteManagerのバージョンは1.2.4。とりあえずSQLiteManagerのバージョン1.2でも同様の現象が発生する。

とりあえず"include/user_defined.inc.php"にてデバッグモードを有効にしたところ、

エラー : near ";": syntax error

と何のあてにもならないメッセージが表示された。念のため、全てのPHPファイルで文法チェック(php -l)したが、おかしなファイルは見つからない。

あちこちにechoコマンドを挿入し、include/SQLiteTableProperties.class.phpのsaveElement()で

DELETE FROM テーブル名 where ROWID = ;

という中途半端なSQLが実行されていたことを確認。ああ、デバッグモードで表示されたエラーメッセージってPHPじゃなくてSQLのことだったのね。さらに調べていくと、このROWIDを取得するためのSQLが

SELECT ROWID, * FROM '\''cases\''' LIMIT 0,1

と、クォーテーションが変なふうにエスケープされていることに気づく。もしかしてmagic_quotes_gpcが有効になっている?

このサーバのPHPはソースコンパイルでインストールした。普段はパッケージ内にあるphp.ini-recommendedを/usr/local/lib/php.iniに配置するのだが、これが抜けていたらしい。php.ini-recommendedでmagic_quotes_gpcがoffになっていることを確認して/usr/local/lib/php.iniに持ってきてhttpdを再起動したら、SQLiteManagerでレコードの削除ができるようになった。めでたしめでたし。

0 件のコメント:

コメントを投稿