PHP mysql 插入日期格式

2022-08-30 09:27:01

Im使用jQuery datepicker datepicker的格式是这个08/25/2012

我在插入数据库时有错误,它只插入0000-00-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';
?>

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


答案 1

日期和时间文本中所述:

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'

  • 作为数字,采用任一或格式,前提是该数字作为日期有意义。例如,被解释为 .YYYYMMDDYYMMDD19830905830905'1983-09-05'

因此,该字符串不是有效的 MySQL 日期文本。您有四种选择(按某种模糊的偏好顺序,没有任何进一步的要求信息):'08/25/2012'

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

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

    或者,如果您很高兴用户能够以格式查看日期,只需设置dateFormat选项即可:YYYY-MM-DD

    $( "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 接收的字符串转换为 PHP 理解为日期的内容,例如 DateTime 对象:

    $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 开始,此扩展已弃用,不建议用于编写新代码,因为它将在将来被删除。相反,应该使用mysqliPDO_MySQL扩展。另请参阅 MySQL API 概述,以获取有关选择 MySQL API 的进一步帮助。

  3. 您似乎使用或列来保存日期值;我建议您考虑改用MySQL的类型。如日期日期时间和时间戳类型中所述:DATETIMETIMESTAMPDATE

    该类型用于具有日期部分但没有时间部分的值。MySQL以格式检索并显示DATE值。支持的范围是 到 。DATE'YYYY-MM-DD''1000-01-01''9999-12-31'

    该类型用于同时包含日期和时间部分的值。MySQL以格式检索和显示值。支持的范围是 到 。DATETIMEDATETIME'YYYY-MM-DD HH:MM:SS''1000-01-01 00:00:00''9999-12-31 23:59:59'

    数据类型用于同时包含日期和时间部分的值。 具有从 UTC 到 UTC 的范围。TIMESTAMPTIMESTAMP'1970-01-01 00:00:01''2038-01-19 03:14:07'


答案 2

您应该考虑从该日期创建时间戳 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 );

推荐