質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

5722閲覧

phpでdate()で取得した値が、0000-00-00

nazo_o

総合スコア99

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/01/21 05:06

phpでdate()で取得した値を$dateという関数に代入して、mysqlで見ると、本来は現在日時が反映されるはずですが、0000-00-00となってしまいます。なぜでしょうか?わかる方がいらっしゃいましたら、ご教授よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

計算された値が挿入されてしまってはいないでしょうか。

例えば以下のような引用符'が付いていないソースコードだと、
2017-01-21 が計算式として解釈されてしまい
実際には 1995 という整数が挿入されてしまいます。
その結果、日付としては 0000-00-00 になってしまうというわけです。

php

1$date = date('Y-m-d'); 2mysql_query("INSERT INTO table (column) VALUE ($date);");

sql

1INSERT INTO `table` (`column`) VALUES (2017-01-21);

以下のように引用符で囲ってやれば解決するはずです。

php

1$date = date('Y-m-d'); 2mysql_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' になる、ということですね。

投稿2017/01/21 05:53

編集2017/08/09 12:00
bezeklik

総合スコア580

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nazo_o

2017/01/21 06:29

詳しい説明ありがとうございます!その方法で解決いたしました!
guest

0

以下の二つのサンプルをそれぞれ実行して、違いを確認してみてください。

php

1<?php 2 3ini_set('display_errors', 1); 4error_reporiting(E_ALL); 5 6echo date(); 7

php

1 2<?php 3 4ini_set('display_errors', 1); 5error_reporiting(E_ALL); 6 7echo date('Y-m-d');

投稿2017/01/21 05:09

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

質問内容に疑問がありますが、

phpでdate()で取得した値を$dateという関数に代入
mysqlで見る

とありますが、phpからmysqlでみる間にデータをmysqlへ登録していると思えばよろしいでしょうか?

0000-00-00

とは、MySQLの結果と考えればよろしいでしょうか?

勝手な解釈で回答させていただけますと

date() → date('Y-M-d'); とする。
と言うことでしょうか

MySQLが求める書式の場合には0000-00-00と表示されます。

質問と回答が一緒になってしましましたが、解消されますと幸いです。

投稿2017/01/21 05:55

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nazo_o

2017/01/21 06:28

そうです!説明不足申し訳有りません!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問