我正在尝试插入格式化为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());
Run Code Online (Sandbox Code Playgroud)
谢谢
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'.作为数字
YYYYMMDD或YYMMDD格式的数字,只要该数字作为日期有意义.例如,19830905并被830905解释为'1983-09-05'.
因此,该字符串'12-Aug-2012'不是有效的MySQL日期文字.您有三种选择(在一些模糊的优先顺序中,没有任何关于您的要求的进一步信息):
配置Datepicker以使用其dateFormat选项以受支持的格式提供日期:
$( ".selector" ).datepicker({ dateFormat: "yyyy-mm-dd" });
Run Code Online (Sandbox Code Playgroud)使用MySQL的STR_TO_DATE()函数转换字符串:
opp_deadline=STR_TO_DATE('$_POST[deadline]', '%d-%b-%Y')
Run Code Online (Sandbox Code Playgroud)
注意:请参阅下面有关SQL注入的警告.
将收到的字符串转换为PHP时间戳 - 例如使用strtotime()当前的:
$timestamp = strtotime($_POST['deadline']);
Run Code Online (Sandbox Code Playgroud)
然后是:
格式化时间戳使用date():
$date = date('Y-m-d', $timestamp);
Run Code Online (Sandbox Code Playgroud)使用FROM_UNIXTIME()以下命令将时间戳直接传递给MySQL :
opp_deadline=FROM_UNIXTIME('$timestamp')
Run Code Online (Sandbox Code Playgroud)您的代码容易受到SQL注入攻击. 您确实应该使用预准备语句,将变量作为未针对SQL进行求值的参数传递到该语句中.如果您不知道我在说什么,或者如何解决它,请阅读Bobby Tables的故事.
此外,如在规定的出台对PHP手册章mysql_*功能:
建议不要使用此扩展名来编写新代码.相反,应该使用mysqli或PDO_MySQL扩展.另请参阅MySQL API概述,以便在选择MySQL API时获得进一步的帮助.
| 归档时间: |
|
| 查看次数: |
796 次 |
| 最近记录: |