programing tip

PHP mysql 삽입 날짜 형식

itbloger 2020. 12. 28. 07:52
반응형

PHP mysql 삽입 날짜 형식


jQuery datepicker를 사용하는 Im 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';
?>

내 삽입이 정확하다고 확신합니다 ....


날짜 및 시간 리터럴에 명시된대로 :

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 날짜 리터럴이 아닙니다. 네 가지 옵션이 있습니다 (요구 사항에 대한 추가 정보없이 선호하는 순서가 모호함).

  1. 옵션altField 과 함께를 사용하여 지원되는 형식으로 날짜를 제공하도록 Datepicker를 구성합니다 .altFormat

    <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. 또한 함수 에 대한 PHP 매뉴얼 장의 소개 에서 언급했듯이 mysql_*:

    이 확장은 PHP 5.5.0부터 사용되지 않으며 향후 제거 될 예정이므로 새 코드를 작성하는 데 권장되지 않습니다. 대신 mysqli 또는 PDO_MySQL 확장을 사용해야합니다. MySQL API 를 선택하는 동안 추가 도움말 MySQL API 개요참조하세요 .

  3. 날짜 값을 보유하기 위해 DATETIME또는 TIMESTAMP열을 사용하는 것으로 보입니다 . DATE대신 MySQL의 유형을 사용하는 것이 좋습니다 . 에서 설명하고있는 바와 같이 , 유형 :DATEDATETIMETIMESTAMP

    DATE유형은 날짜 부분은 있지만 시간 부분은없는 값에 사용됩니다. MySQL은 DATE 값을 'YYYY-MM-DD'형식으로 검색하고 표시 합니다. 지원되는 범위는 '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데이터 타입은 날짜와 시간 부분을 모두 포함하는 값에 사용됩니다. UTC에서 UTC TIMESTAMP까지의 범위가 있습니다.'1970-01-01 00:00:01''2038-01-19 03:14:07'


해당 날짜에서 타임 스탬프 생성을 고려해야합니다. witk 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 );

$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());

jQuery 출력에서 ​​날짜 형식이 YYYY-MM-DD인지 확인해야합니다. jQuery가 유효한 MySQL 날짜 형식 이 아닌 MM-DD-YYYY를 반환하는 것을 볼 수 있으며 이것이 오류를 반환하는 이유입니다.

올바른 것으로 변환하려면 다음을 수행하십시오.

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

그런 다음 유효한 MySQL 형식 (예 : 2012-08-25 ) 인 YYYY-MM-DD 형식의 날짜를 얻게됩니다.

또한 데이터베이스에 데이터를 삽입 할 때 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() );

가장 간단한 방법은

$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());

Get a date object from the jquery date picker using

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

For mysql the date needs to be in the proper format. One option which handles any timezone issues is to use moment.js

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

Try Something like this..

echo "The time is " . date("2:50:20");
$d=strtotime("3.00pm july 28 2014");
echo "Created date is " . date("d-m-y h:i:sa",$d);

First of all store $date=$_POST['your date field name'];

insert into **Your_Table Name** values('$date',**other fields**);

You must contain date in single cote (' ')

I hope it is helps.

ReferenceURL : https://stackoverflow.com/questions/12120433/php-mysql-insert-date-format

반응형