4

我正在尝试插入格式为 2012 年 8 月 12 日的日期,但是当我在插入后检查数据库集时,我只能在日期字段上看到00-00-0000 ?

这是我使用的查询:

$query= "INSERT INTO ambition_opportunities SET

 opp_deadline='".strtotime($_POST['deadline'])."'"; // date field come with date picker** 

 $sql = mysql_query($query) or die(mysql_error());

谢谢

4

4 回答 4

6

日期和时间文字中所述:

MySQL 可以识别DATE以下格式的值:

  • 作为一个'YYYY-MM-DD''YY-MM-DD'格式的字符串。允许使用“宽松”语法:任何标点符号都可以用作日期部分之间的分隔符。例如,'2012-12-31''2012/12/31''2012^12^31''2012@12@31'是等价的。

  • 作为在任何一种格式中都没有分隔符的'YYYYMMDD'字符串'YYMMDD',前提是该字符串作为日期有意义。例如,'20070523'and'070523'被解释为'2007-05-23', 但是'071332'是非法的(它有无意义的月份和日期部分)并且变成'0000-00-00'.

  • 作为任一YYYYMMDD格式YYMMDD的数字,前提是该数字作为日期有意义。例如19830905830905被解释为'1983-09-05'

因此,字符串'12-Aug-2012'不是有效的 MySQL 日期文字。您有三个选项(以某种模糊的偏好顺序,没有任何关于您的要求的进一步信息):

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

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

    opp_deadline=STR_TO_DATE('$_POST[deadline]', '%d-%b-%Y')
    

    注意:请参阅下面有关 SQL 注入的警告。

  3. 将接收到的字符串转换为 PHP 时间戳——例如,strtotime()按照您当前的方式使用:

    $timestamp = strtotime($_POST['deadline']);
    

    然后是:

    • 使用以下格式格式化时间戳date()

      $date = date('Y-m-d', $timestamp);
      
    • 使用以下命令将时间戳直接传递给 MySQL FROM_UNIXTIME()

      opp_deadline=FROM_UNIXTIME('$timestamp')
      

警告

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

  2. 此外,正如PHP 手册关于函数的章节的介绍mysql_*中所述:

    不建议将此扩展用于编写新代码。相反,应该使用mysqliPDO_MySQL扩展。在选择 MySQL API 时,另请参阅MySQL API 概述以获得更多帮助。

于 2012-08-26T09:10:04.973 回答
0

我正在尝试在文本框 2013-12-24 中插入日期。数据库中的日期显示为 1970-01-01

$date=$year & $month & $day; $date= Date("Ymd", strtotime($date));

    $query = "INSERT INTO `book` VALUES('$id', '$title', '$author_name', '$publisher', '$date' )";
于 2013-12-24T04:29:43.813 回答
0

正如您所提到的,数据库中字段的类型是00-00-0000. 您插入格式为: 的值12-Aug-2012

您应该将您的月份值从“月份名称”转换为“数字”,例如:

Jan -> 01,
Feb -> 02 ...

你明白了。

在那之后,它应该工作。

于 2012-08-26T09:09:26.007 回答
0

您必须确保输入的日期格式为YYYY-MM-DD. 2012 年 8 月 12 日不是有效的MySQL 日期格式,这就是它返回错误的原因。

此外,您的代码易受 SQL 注入攻击。我强烈建议您在将数据插入数据库时​​使用mysql_real_escape_string以防止SQL 注入,作为一种快速解决方案或更好地使用PDOMySQLi

您的插入查询应该如下所示:

  SET
 opp_provider='".mysql_real_escape_string($_POST['provider'])."'";
于 2012-08-26T09:15:33.120 回答