Project

General

Profile

Bug(バグ) #4163

OpenPNE 3 - Task(タスク) #4033: MySQLのStrict Modeを有効にした場合に生じる問題を調査

テスト用fixtureの記述に誤りがありロード時にエラーが発生する

Added by Youichi Kimura about 2 years ago.

Status:
New(新規)
Priority:
Normal(通常)
Assignee:
-
Target version:
-
Start date:
2017-02-17
Due date:
% Done:

0%

3.6 で発生するか:
Unknown (未調査)
[QA]バグ通知済:
No
3.8 で発生するか:
Unknown (未調査)

Description

Overview (概要)

MySQL 5.7 の Strict Mode が有効な状態での動作確認 (#4033) を行った際に発生した。

fixture の読み込みを必要とするテストコードを実行すると下記のエラーが発生する:

$ php plugins/opFavoritePlugin/test/functional/pc_frontend/favoriteActionsTest.php 
PHP Fatal error:  Uncaught exception 'Doctrine_Connection_Mysql_Exception' with message 'SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '1487263613' for column 'date' at row 1' in /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php:1082
Stack trace:
#0 /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection/Statement.php(269): Doctrine_Connection->rethrowException(Object(PDOException), Object(Doctrine_Connection_Statement))
#1 /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php(1042): Doctrine_Connection_Statement->execute(Array)
#2 /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php(687): Doctrine_Connection->exec('INSERT INTO blo...', Array)
#3 /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection/UnitOfWork.php(647): Doctrine_Connection->insert(Object(BlogRssCacheTable),  in /vagrant/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php on line 1082

Causes (原因)

test/fixtures/004_import_blog_rss_cache.yml#L14:

BlogRssCache:
  first_member_blog_rss_cache:
    Member: third_member
    title: "<&\"'>BlogRssCache.title ESCAPING HTML TEST DATA" 
    description: "description" 
    link: "http://localhost/" 
    date: <?php echo date("Y-m-d H:i:s\n") ?>

上記のように記述された fixture は以下のような YAML を出力します。

BlogRssCache:
  first_member_blog_rss_cache:
    Member: third_member
    title: "<&\"'>BlogRssCache.title ESCAPING HTML TEST DATA" 
    description: "description" 
    link: "http://localhost/" 
    date: 2017-02-27 01:46:53

文字列としてダブルクオーテーションで囲われていない日付は、YAML のロード時にタイムスタンプの数値に置換されるため、'1487263613' が不正な形式の日付であるとしてエラーが発生する。

Also available in: Atom PDF