web-dev-qa-db-ja.com

PHP mysql insert date format

私はjQueryのdatepickerを使用してdatepickerの形式はこれです08/25/2012

データベースに挿入するときにエラーが発生します0000-00-00 00 00 00のみを挿入します

私のコードは

<?php
$id = $_POST['id'];
$name = $_POST['name'];
$date = $_POST['date'];
$sql = mysql_query( "INSERT INTO user_date VALUE( '', '$name', '$date')" ) or die ( mysql_error() );
echo 'insert successful';
?>

私の挿入物が正しいことを確認してください....

55
Butternut

日付と時刻のリテラル で述べたように:

MySQLは、次の形式の DATE 値を認識します。

  • 'YYYY-MM-DD'または'YY-MM-DD'形式の文字列として。 「緩和された」構文が許可されます。句読点文字は、日付部分間の区切り文字として使用できます。たとえば、'2012-12-31''2012/12/31''2012^12^31'、および'2012@12@31'は同等です。

  • 文字列が日付として意味がある場合は、'YYYYMMDD'または'YYMMDD'形式の区切り文字のない文字列として。たとえば、'20070523''070523''2007-05-23'として解釈されますが、'071332'は違法で(無意味な月と日の部分があります)、'0000-00-00'になります。

  • YYYYMMDDまたはYYMMDD形式の数値として。ただし、数値は日付として意味があります。たとえば、19830905830905'1983-09-05'として解釈されます。

したがって、文字列'08/25/2012'は有効なMySQL日付リテラルではありません。次の4つのオプションがあります(要件の詳細情報なしで、漠然とした好みの順序で)。

  1. altFieldaltFormatオプション を使用して、サポートされている形式で日付を提供するようにDatepickerを構成します。

    <input type="hidden" id="actualDate" name="actualDate"/>
    
    $( "selector" ).datepicker({
        altField : "#actualDate"
        altFormat: "yyyy-mm-dd"
    });
    

    または、ユーザーがYYYY-MM-DD形式で日付を確認できる場合は、代わりに dateFormatオプション を設定します。

    $( "selector" ).datepicker({
        dateFormat: "yyyy-mm-dd"
    });
    
  2. MySQLの STR_TO_DATE() 関数を使用して文字列を変換します。

    INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
    
  3. JQueryから受け取った文字列を、 DateTime オブジェクトなど、PHPが日付として理解できるものに変換します。

    $dt = \DateTime::createFromFormat('m/d/Y', $_POST['date']);
    

    そして、次のいずれか:

    • 適切なフォーマットされた文字列を取得します。

      $date = $dt->format('Y-m-d');
      
    • uNIXタイムスタンプを取得します。

      $timestamp = $dt->getTimestamp();
      

      次に、MySQLの FROM_UNIXTIME() 関数に直接渡されます。

      INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
      
  4. 文字列を有効なリテラルに手動で操作します。

    $parts = explode('/', $_POST['date']);
    $date  = "$parts[2]-$parts[0]-$parts[1]";
    

警告

  1. コードはSQLインジェクションに対して脆弱です。本当にを使用する必要があります準備されたステートメント 。SQLに対して評価されないパラメーターとして変数を渡します。私が何を話しているのか、またはそれを修正する方法がわからない場合は、 Bobby Tables のストーリーを読んでください。

  2. また、mysql_*関数のPHPマニュアルの章の 紹介 で述べられているように:

    この拡張機能はPHP 5.5.0で非推奨になり、将来削除されるため、新しいコードを記述することはお勧めしません。代わりに、 mysqli または PDO_MySQL 拡張機能を使用する必要があります。 MySQL APIを選択する際の詳細なヘルプについては、 MySQL API Overview も参照してください。

  3. 日付値を保持するためにDATETIMEまたはTIMESTAMP列を使用しているようです。代わりにMySQLのDATEタイプの使用を検討することをお勧めします。 DATEDATETIME、およびTIMESTAMPタイプ で説明されているとおり:

    DATE型は、日付部分はあるが時刻部分はない値に使用されます。 MySQLは、'YYYY-MM-DD'形式でDATE値を取得して表示します。サポートされる範囲は'1000-01-01'から'9999-12-31'です。

    DATETIME型は、日付と時刻の両方の部分を含む値に使用されます。 MySQLはDATETIMEの値を'YYYY-MM-DD HH:MM:SS'形式で取得して表示します。サポートされる範囲は'1000-01-01 00:00:00'から'9999-12-31 23:59:59'です。

    TIMESTAMPデータ型は、日付と時刻の両方の部分を含む値に使用されます。 TIMESTAMPの範囲は'1970-01-01 00:00:01' UTCから'2038-01-19 03:14:07' UTCです。

168
eggyal

その日付からタイムスタンプを作成することを検討する必要があります mktime()

例えば:

$date = explode('/', $_POST['date']);
$time = mktime(0,0,0,$date[0],$date[1],$date[2]);
$mysqldate = date( 'Y-m-d H:i:s', $time );
10
Mihai Iorga
$date_field         = date('Y-m-d',strtotime($_POST['date_field']));
$sql = mysql_query("INSERT INTO user_date (column_name,column_name,column_name) VALUES('',$name,$date_field)") or die (mysql_error());
6
Kishan Chauhan

JQuery出力の日付形式がYYYY-MM-DDであることを確認する必要があります。 jQueryがMM-DD-YYYYを返すことがわかりますが、これは有効な MySQLの日付形式 ではないため、エラーが返されます。

それを正しいものに変換するには、これを行うことができます:

$dateFormated = split('/', $date);
$date = $dateFormated[2].'-'.$dateFormated[0].'-'.$dateFormated[1];

次に、有効なMySQL形式であるフォーマットされた日付を取得します。これはYYYY-MM-DD、つまり2012-08-25です。

また、 mysql_real_escape_string を使用してデータベースにデータを挿入し、 SQLインジェクション を迅速な解決策として使用するか、より適切に使用することをお勧めします PDO または- MySQLi

mysql_real_escape_stringを使用した挿入クエリは、次のようになります。

$sql = mysql_query( "INSERT INTO user_date VALUE( '', '" .mysql_real_escape_string($name). "', '" .mysql_real_escape_string($date). "'" ) or die ( mysql_error() );
1
Ilia Rostovtsev

を使用してjquery日付ピッカーから日付オブジェクトを取得します

var myDate = $('element').datepicker('getDate')

Mysqlの場合、日付は適切な形式である必要があります。タイムゾーンの問題を処理する1つのオプションは、moment.jsを使用することです

moment(myDate).format('YYYY-MM-DD HH:mm:ss')
0
ykay

最も簡単な方法は

$dateArray = explode('/', $_POST['date']);
$date = $dateArray[2].'-'.$dateArray[0].'-'.$dateArray[1];

$sql = mysql_query("INSERT INTO user_date (column,column,column) VALUES('',$name,$date)") or die (mysql_error());
0
William Worley