MySQL日期插入错误

时间:2012-08-26 09:02:58

标签: php mysql

我正在尝试插入格式为 12-Aug-2012 的日期,但是当我在插入后检查数据库集时,我只能看到 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 个答案:

答案 0 :(得分:6)

Date and Time Literals中所述:

  

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格式的数字,前提是该数字作为日期有意义。例如,19830905830905被解释为'1983-09-05'

  •   

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

  1. 配置Datepicker以使用其dateFormat option

    以支持的格式提供日期
    $( ".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);
      
    • 使用FROM_UNIXTIME()将时间戳直接传递给MySQL:

      opp_deadline=FROM_UNIXTIME('$timestamp')
      

  4. 警告

    1. 您的代码容易受到SQL注入攻击。真的应该使用prepared statements,您将变量作为参数传递到其中得到SQL的评估。如果您不知道我在说什么,或者如何解决它,请阅读Bobby Tables的故事。

    2. 另外,正如the introduction中关于mysql_*函数的PHP手册章节所述:

        

      建议不要使用此扩展名来编写新代码。相反,应使用mysqliPDO_MySQL扩展名。在选择MySQL API时,另请参阅MySQL API Overview以获得进一步的帮助。

答案 1 :(得分:0)

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

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

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

你明白了。

之后,它应该有用。

答案 2 :(得分:0)

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

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

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

  SET
 opp_provider='".mysql_real_escape_string($_POST['provider'])."'";

答案 3 :(得分:0)

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

$ date = $ year& $ month& $天;         $ date =日期(“Y-m-d”,strtotime($ date));

    $query = "INSERT INTO `book` VALUES('$id', '$title', '$author_name', '$publisher', '$date' )";