PHP的mysql插入date格式

即时通讯使用jQuery datepicker 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'; ?> 

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

如date和时间文字所述 :

MySQL以这些格式识别DATE值:

  • 作为'YYYY-MM-DD''YY-MM-DD'格式的string。 允许使用“宽松”的语法:可以使用任何标点字符作为date部分之间的分隔符。 例如, '2012-12-31''2012/12/31''2012^12^31''2012@12@31'等同。

  • 作为一个没有'YYYYMMDD''YYMMDD'格式的分隔符的string,只要string作为date是有意义的。 例如, '20070523''070523'被解释为'2007-05-23' ,但是'071332'是非法的(它具有无意义的月份和date部分)并且变成'0000-00-00'

  • 作为YYYYMMDDYYMMDD格式的数字,前提是该数字作为date有意义。 例如, 19830905830905被解释为'1983-09-05'

因此,string'08/25/2012'不是有效的MySQLdate文字。 你有四个选项(按照一些模糊的优先顺序,没有你的要求的任何进一步的信息):

  1. configurationaltField以支持的格式使用altFieldaltFormat选项提供date:

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

    或者,如果您对用户以YYYY-MM-DD格式查看date感到高兴,则只需设置dateFormat选项即可 :

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

     INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y')) 
  3. 将从jQuery接收到的string转换为PHP可以理解为date(如DateTime对象)的内容:

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

    然后:

    • 获取合适的格式化string:

       $date = $dt->format('Ym-d'); 
    • 获取UNIX时间戳:

       $timestamp = $dt->getTimestamp(); 

      然后直接传递给MySQL的FROM_UNIXTIME()函数:

       INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp)) 
  4. 手动操作string到一个有效的文字:

     $parts = explode('/', $_POST['date']); $date = "$parts[2]-$parts[0]-$parts[1]"; 

警告

  1. 您的代码易受SQL注入攻击。真的应该使用准备好的语句 ,把你的variables作为parameter passing给你,这些参数不会被SQL评估。 如果你不知道我在说什么,或者如何解决,请阅读鲍比表的故事。

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

    这个扩展从PHP 5.5.0开始已经被弃用了,不推荐用来编写新的代码,因为它将来会被删除。 而应该使用mysqli或PDO_MySQL扩展。 请参阅MySQL API概述,以获取进一步的帮助,同时selectMySQL API。

  3. 您似乎使用DATETIMETIMESTAMP列来保存date值; 我build议你考虑使用MySQL的DATEtypes。 如DATEDATETIMETIMESTAMPtypes中所述 :

    DATEtypes用于具有date部分但没有时间部分的值。 MySQL以'YYYY-MM-DD'格式检索并显示DATE值。 支持的范围是'9999-12-31''9999-12-31'

    DATETIMEtypes用于包含date和时间部分的值。 MySQL以'YYYY-MM-DD HH:MM:SS'格式检索并显示DATETIME值。 支持的范围是'1000-01-01 00:00:00''9999-12-31 23:59:59'

    TIMESTAMP数据types用于包含date和时间部分的值。 TIMESTAMP的范围为'1970-01-01 00:00:01' 00 '2038-01-19 03:14:07''2038-01-19 03:14:07'

您应该考虑从该date创build一个时间戳witk mktime()

例如:

 $date = explode('/', $_POST['date']); $time = mktime(0,0,0,$date[0],$date[1],$date[2]); $mysqldate = date( 'Ymd H:i:s', $time ); 
 $date_field = date('Ym-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输出的date格式是YYYY-MM-DD。 我可以看到jQuery返回MM-DD-YYYY,这不是有效的MySQLdate格式 ,这就是为什么它返回一个错误。

要将其转换为正确的,你可以这样做:

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

然后你将得到格式化的date,这将是有效的MySQL格式,这是YYYY-MM-DD,即2012-08-25

在将数据插入数据库时​​,我还build议使用mysql_real_escape_string ,以防止SQL注入成为快速解决scheme,或者更好地使用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()); 

从jquerydateselect器中使用获取date对象

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

对于mysql来说,date需要使用正确的格式。 处理任何时区问题的一个选项是使用moment.js

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

试试像这样的东西

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

首先储存$date=$_POST['your date field name'];

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

您必须在单个cote中包含date('')

我希望这是帮助。