symfonyでUnable to convert value at column * to timestampのエラー

phpのバージョンを5.2.4に上げたときにmysqlを使用しているサイトでsymfonyのエラーがでるようになった。

内容は次のようなもの。

Unable to convert value at column * to timestamp: 0000-00-00 00:00:00

調べてみると「Warning about PHP 5.2.4 and Creole」という記事が見つかった。

どうやら、php 5.2.3以前のバグを5.2.4で修正したのが原因らしい。strtotime で’0000-00-00 00:00:00’を指定したときに、今まではなぜか、「943905600」が返されていたが、5.2.4以降はFALSEが返されるようになったため。

そこで、symfonyのディレクトリで(うちの場合は、/usr/share/pear/symfony)

grep -rn 'Unable to convert value at column' *

で調べると
vendor/creole/common/ResultSetCommon.php
vendor/creole/drivers/mysqli/MySQLiResultSet.php
vendor/creole/drivers/mysql/MySQLResultSet.php
vendor/creole/drivers/mssql/MSSQLCallableStatement.php
が該当した。
ここでは、mysqlが問題になるので、上の3つのファイルの

if ($ts === -1 || $ts === false) { // in PHP 5.1 return value changes to FALSE
	throw new SQLException("Unable to convert value at column " . (is_int($column) ? $column + 1 : $column) . " to timestamp: " . $this->fields[$idx]);
}

という個所(ファイルによっては2か所以上ある)を

if ($ts === -1 || $ts === false) { // in PHP 5.1 return value changes to FALSE
	//throw new SQLException("Unable to convert value at column " . (is_int($column) ? $column + 1 : $column) . " to timestamp: " . $this->fields[$idx]);
	return '943916400';
}

とした。

一応これで動くようになったがこれはあくまでも仮の処理。おそらくsymfony側でも対応するだろう。とおもっていたら、既に修正されていた。 そして、昨日symfony 1.0.9がリリースされていた

さっそくアップデートしてみよう。

Share on Facebook
このエントリーをはてなブックマークに追加
はてなブックマーク - symfonyでUnable to convert value at column * to timestampのエラー
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip
Share on FriendFeed

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です