PHP mysql插入日期格式

But*_*nut 56 php mysql date insert

我使用jQuery datepicker,datepicker的格式是这样的 08/25/2012

插入到我的数据库时我有错误它只插入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';
?>
Run Code Online (Sandbox Code Playgroud)

我确定我的插入是正确的....

egg*_*yal 169

日期和时间文字中所述:

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'.

  • 作为数字YYYYMMDDYYMMDD格式的数字,只要该数字作为日期有意义.例如,19830905并被830905解释为'1983-09-05'.

因此,该字符串'08/25/2012'不是有效的MySQL日期文字.您有四种选择(在一些模糊的优先顺序中,没有任何关于您的要求的进一步信息):

  1. 配置Datepicker以使用altField及其altFormat选项提供支持格式的日期:

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

    或者,如果您对用户在YYYY-MM-DD格式中查看日期感到满意,只需设置dateFormat选项:

    $( "selector" ).datepicker({
        dateFormat: "yyyy-mm-dd"
    });
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用MySQL的STR_TO_DATE()函数转换字符串:

    INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将从jQuery接收的字符串转换为PHP理解为日期的字符串,例如DateTime对象:

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

    然后是:

  4. 手动将字符串操作为有效的文字:

    $parts = explode('/', $_POST['date']);
    $date  = "$parts[2]-$parts[0]-$parts[1]";
    
    Run Code Online (Sandbox Code Playgroud)

警告

  1. 您的代码容易受到SQL注入攻击.确实应该使用预准备语句,将变量作为未针对SQL进行求值的参数传递到该语句中.如果您不知道我在说什么,或者如何解决它,请阅读Bobby Tables的故事.

  2. 此外,如在规定的出台对PHP手册章mysql_*功能:

    此扩展自PHP 5.5.0起不推荐使用,不建议用于编写新代码,因为将来会删除它.相反,应该使用mysqliPDO_MySQL扩展.另请参阅MySQL API概述,以便在选择MySQL API时获得进一步的帮助.

  3. 您似乎使用a DATETIMETIMESTAMP列来保存日期值; 我建议您考虑使用MySQL的DATE类型.正如上文DATE,DATETIMETIMESTAMP类型:

    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 的范围.


Mih*_*rga 10

您应该考虑从该日期创建一个时间戳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 );
Run Code Online (Sandbox Code Playgroud)


Kis*_*han 7

$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());
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,你给我提示`date('Ym-d',strtotime($ _ POST ['date_field']));`是有效的,这正是我想要的. (2认同)