システムアップグレード時にメールフォームのテーブルのデータベースマイグレーションスクリプトでシンタックスエラー

pettyconan > システムアップグレード時にメールフォームのテーブルのデータベースマイグレーションスクリプトでシンタックスエラー @ 2016/4/25 15:19
【動作環境】
■BaserCMS : 3.0.7 → 3.0.9
■設置フォルダ : ドキュメントルート
■PHP : 5.5.33
■利用データベース : MySQL 5.5.46

【現象】
BaserCMS のシステムアップグレード時に Internal Server Error が発生する。
アプリケーションエラーログ(app/tmp/logs/error.log)には以下のようなエラーが記録されている。
引用:
2016-04-22 03:33:26 Error: Fatal Error (4): syntax error, unexpected '-', expecting ',' or ';' in [/var/www/basercms/app/tmp/schemas/mail_contents_current.php, line 463]


【原因】
システムアップグレード処置が自動生成するテーブルマイグレーション処理(app/tmp/schemas/mail_contents_current.php)は、アップデート用のSQLを格納する変数名をMySQLのテーブル名から生成している。
メールフォームが作成する mysql_pg_****_messages (****はフォームID)にはハイフンなどの記号を含める事ができ、それらが含まれたフォームIDを使用すると、テーブル名にも同じように記号が含まれる。
(私の環境ではテーブル名にバックスラッシュおよびハイフンが含まれているテーブルが存在していた)
先述の通り、システムアップグレードの際に自動生成されるマイグレーションスクリプトには、MySQLのテーブル名を元にした変数にSQLを格納するコードが生成されるが、PHP ではハイフンなどの記号は変数に利用出来ないため、シンタックスエラーが発生する。

当方のケースにおいてはメールIDを修正して該当テーブルをリネームするとともに、一部、不要なテーブル(削除したはずのメールフォームのテーブル)が残っていたため、それらを削除してシステムアップグレードを再実行することで解決した。

【対処案】
1. システムアップグレード時にマイグレーションスクリプトを生成する処理において、変数名を生成する際にはPHPの変数として利用出来ない記号を除去するかアンダースコア等に置換するようにする。
2. メールフォームのIDに使用できる文字列を制限する。

後方互換を考慮すると後者の対応はなかなか難しいと思われるので、前者の対応がよろしいかと。
beychan > Re: システムアップグレード時にメールフォームのテーブルのデータベースマイグレーションスクリプトでシンタックスエラー @ 2016/5/18 10:57
pettyconanさん

バグ報告とその対処案まで提示いただきありがとうございます。

チケットを切っておきました!
http://project.e-catchup.jp/issues/12073

よろしくお願いします。


【追記】
こちらのバグはbaserCMSの3.1.0 で解消するように調整される予定のようです。
ログイン
ユーザー名:
パスワード:


  新規登録 / パスワード紛失

検索

facebook
フォーラムで悩みが解決した場合など、よかったら「いいね!」をポチっとクリックしてください!質問の回答者や開発者の励みになります

フォーラムガイド


関連リンク

オンライン状況
6 人のユーザが現在オンラインです。 (6 人のユーザが フォーラム を参照しています。)

登録ユーザ: 0
ゲスト: 6