質問: phpでdate()で取得した値を$dateという関数に代入して、mysqlで見ると、本来は現在日時が反映されるはずですが、0000-00-00となってしまいます。なぜでしょうか?わかる方がいらっしゃいましたら、ご教授よろしくお願い致します。
回答: 計算された値が挿入されてしまってはいないでしょうか。 例えば以下のような引用符`'`が付いていないソースコードだと、 `2017-01-21` が計算式として解釈されてしまい 実際には 1995 という整数が挿入されてしまいます。 その結果、日付としては 0000-00-00 になってしまうというわけです。 ``` $date = date('Y-m-d'); mysql_query("INSERT INTO table (column) VALUE ($date);"); ``` ``` INSERT INTO `table` (`column`) VALUES (2017-01-21); ``` 以下のように引用符で囲ってやれば解決するはずです。 ``` $date = date('Y-m-d'); mysql_query("INSERT INTO table (column) VALUE ('$date');"); ``` MySQL :: MySQL 5.6 リファレンスマニュアル :: 9.1.3 日付リテラルと時間リテラル > > 数値として指定する値は、6、8、12、14 のいずれかの桁数にするようにしてください。数値を 8 桁または 14 桁の長さにすると、YYYYMMDD または YYYYMMDDHHMMSS 形式であり、最初の 4 桁が年であると想定されます。数値を 6 桁または 12 桁の長さにすると、YYMMDD または YYMMDDHHMMSS 形式であり、最初の 2 桁が年であると想定されます。これらの長さではない数字は、いちばん近い長さまで先行ゼロで埋められているかのように解釈されます。 > > > この仕様により 1995 は 001995 と解釈されることになります。 > > 日時コンテキストでの文字列リテラルと数値リテラル MySQL は次の形式で DATE 値を認識します。 > > (snip) > > 'YYYYMMDD' または 'YYMMDD' 形式の、区切り文字がない文字列 (日付として適切なもの) として。たとえば、'20070523' と '070523' は '2007-05-23' として解釈されますが、'071332' は正しくないため (月と日の部分が不適切)、'0000-00-00' になります。 > > > この仕様により、 001995 が正しくないため '0000-00-00' になる、ということですね。