2017-01-22 10 views
1

データベースに保存する日付形式をd-m-yからy-d-mに並べ替える機能を書いた。元の日付を持つ生の文字列は、挿入クエリで正しく格納されますが、書式付きの文字列は正しく格納されません。DATE予期しない動作を挿入します。どうして?

表構造:

+-------+------+ 
| Field | Type | 
+-------+------+ 
| id | INT()| 
+-------+------+ 
| date1 | DATE | 
+-------+------+ 
| date2 | DATE | 
+-------+------+ 

PHP:

<?php 
$db = new mysqli("localhost","root","","test"); 
function date2Store($date) { 
    $dateFormat = DateTime::createFromFormat('d-m-y',$date); 
    return $dateFormat->format('y-d-m'); 
} 
$dateRaw = "22-01-17"; 
$dateFormatted = date2Store($dateRaw); 
echo $dateFormatted; // Checking how the string looks 
$query = "INSERT INTO dateTest(date1,date2) VALUES ('$dateFormatted','$dateRaw')"; 
echo $query; // Checking how the query looks 
$db->query($query); 
?> 

これの結果は次のとおりです。

+----+------------+------------+ 
| id | date1  | date2 | 
+----+------------+------------+ 
| 1 | 0000-00-00 | 2022-01-17 | 
+----+------------+------------+ 

$クエリ版画:

INSERT INTO dateTest(date1,date2) VALUES ('17-22-01','22-01-17') 

両方が文字列であることを確認しましたが、クエリが正しいように見えます。なぜ彼らは異なったものを保管していますか?

答えて

2

17-22-01は有効な日付ではないため、MySQLサーバーの設定によっては、DATEタイプのフィールドには格納されません。

有効なmysqlの日付形式ではないソース形式を保存する場合は、別のフィールドタイプp.e.を使用してください。 varchar

  • MySQLはこれらのフォーマットでDATE値を認識しますので、あなたのINSERT -statementで使用することができます -

    は、MySQLによって許可されているどのような日付の形式を発見するために見 here into the MySQL manualを持っています' YYYY-MM-DD'または ' YY-MM-DD'のいずれかの文字列です。 「リラックス」構文が許可されています。句読点文字は、日付部分間の区切り文字として として使用できます。たとえば、「 2012-12-31」、 「 2012/12/31」、「 2012^12^31」、および「 [email protected]@31」は同等です。

  • デリミタが 'YYYYMMDD'または 'YYMMDD'のいずれかの文字列で、文字列は日付として意味があります。例えば、 「20070523」と「070523」「は2007-05-23」として解釈されるが、「071332」 が不正である(それは無意味月と日の部分を有する)と 「0000-00-00」となります。

  • YYYYMMDDまたはYYMMDDのいずれかの数値(ただし、数値は日付として意味があります)。たとえば、19830905および830905は、「1983-09-05」と解釈される です。

+0

[OK]を、私の愚かな、私は間違った方向に間違いを探していました。私は 'y-m-d'のときに' y-d-m'をフォーマットしていました。私を指してくれてありがとう。 – MarioZ