プロジェクト

全般

プロフィール

Bug(バグ) #3543

MySQLのStrict Modeが有効な状態でメンバーの新規登録を行うとエラーが発生する

Youichi Kimura約10年前に追加. ほぼ7年前に更新.

ステータス:
Won't fix(対応せず)
優先度:
Normal(通常)
担当者:
対象バージョン:
開始日:
2014-01-07
期日:
進捗率:

0%

3.6 で発生するか:
Unknown (未調査)
3.8 で発生するか:
Unknown (未調査)

説明

現象

MySQLの Strict Mode が有効な環境でメンバーの新規登録を行う際に プリセット でかつ 日付 の項目を入力すると、次のようなエラーが発生する。

SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '' for column 'value_datetime' at row 1

エラーが発生した SQL は下記の通り。

12月 27 17:23:12 symfony [info] {Doctrine_Connection_Statement} execute : INSERT INTO member_profile (value, member_id, profile_id, value_datetime, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?) - (, 6, 2, , 2013-12-27 17:23:12, 2013-12-27 17:23:12)

再現手順

  1. MySQL の my.cnf に下記の設定を加える
    [mysqld]
    sql_mode=STRICT_ALL_TABLES
    
  2. 管理画面から招待メールを送信し、メールに記載されたURLから新規登録ページ (/member/register) を開く
  3. プロフィール入力 (/member/registerInput) へ進む
  4. 必須項目と 誕生日 を入力する
  5. 「送信」をクリックすると500エラーが発生する

原因

MemberProfile::preSave() 内の下記のコードが直接の原因となっている。

    elseif ('date' === $this->getFormType() && isset($modified['value']) && $this->getProfile()->isPreset())
    {   
      $this->_set('value_datetime', $this->_get('value'));
    }

config/doctrine/schema.ymlMemberProfile.value のデフォルト値が "" であると記述されているため、value に変更が加えられたか否かに係わらず MemberProfile::preSave() 内で isset($modified['value']) は常に true になる(UPDATE の場合を除く)。
すると MemberProfile.value_datetime に空文字列がそのままセットされてしまい、前述の Invalid datetime format エラーが発生してしまう。

なお、プリセットではない日付型のプロフィール項目については value_datetime は使用されない (参照: b6445a0a) ためこの問題は発生しない。

修正内容

MemberProfile::preSave() 内で value_datetime に対するから文字列の代入が行われないように $modified['value'] のチェックを行う。


関連するチケット

コピー先 OpenPNE 3 - Backport(バックポート) #3723: MySQLのStrict Modeが有効な状態でメンバーの新規登録を行うとエラーが発生する Fixed(完了) 2014-01-07
コピー先 OpenPNE 3 - Backport(バックポート) #3724: MySQLのStrict Modeが有効な状態でメンバーの新規登録を行うとエラーが発生する Fixed(完了) 2014-01-07

関係しているリビジョン

リビジョン d18ed005 (差分)
Youichi Kimura約10年前に追加

fix MemberProfile::preSave() set empty string to value_datetime if value is empty (fixes #3543)

履歴

#1 Youichi Kimura約10年前に更新

  • 説明 を更新 (diff)

#2 Youichi Kimura約10年前に更新

  • 説明 を更新 (diff)

#3 Youichi Kimura約10年前に更新

  • 説明 を更新 (diff)

#4 Youichi Kimura約10年前に更新

  • ステータスAccepted(着手) から Pending Review(レビュー待ち) に変更
  • 進捗率0 から 50 に変更

更新履歴 d18ed005dd5430d53141271dec226b2bfcd20b0d で適用されました。

#5 isao sano9年以上前に更新

#6 isao sano9年以上前に更新

#7 Shinichi Urabe9年以上前に更新

  • ステータスPending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
  • 進捗率50 から 70 に変更

レビューOK

#10 kaoru nほぼ7年前に更新

  • ステータスPending Testing(テスト待ち) から Won't fix(対応せず) に変更
  • 対象バージョンOpenPNE 3.9.0-old から OpenPNE 3.9.0 に変更
  • 進捗率70 から 0 に変更

OpenPNE 3.8.14 にて対応済みであったため、対応せずとします。

他の形式にエクスポート: Atom PDF