But*_*nut 56 php mysql date insert
我使用jQuery datepicker,datepicker的格式是这样的 08/25/2012
插入到我的数据库时我有错误它只插入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';
?>
Run Code Online (Sandbox Code Playgroud)
我确定我的插入是正确的....
egg*_*yal 169
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'.
因此,该字符串'08/25/2012'不是有效的MySQL日期文字.您有四种选择(在一些模糊的优先顺序中,没有任何关于您的要求的进一步信息):
配置Datepicker以使用altField及其altFormat选项提供支持格式的日期:
<input type="hidden" id="actualDate" name="actualDate"/>
Run Code Online (Sandbox Code Playgroud)
$( "selector" ).datepicker({
altField : "#actualDate"
altFormat: "yyyy-mm-dd"
});
Run Code Online (Sandbox Code Playgroud)
或者,如果您对用户在YYYY-MM-DD格式中查看日期感到满意,只需设置dateFormat选项:
$( "selector" ).datepicker({
dateFormat: "yyyy-mm-dd"
});
Run Code Online (Sandbox Code Playgroud)使用MySQL的STR_TO_DATE()函数转换字符串:
INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
Run Code Online (Sandbox Code Playgroud)将从jQuery接收的字符串转换为PHP理解为日期的字符串,例如DateTime对象:
$dt = \DateTime::createFromFormat('m/d/Y', $_POST['date']);
Run Code Online (Sandbox Code Playgroud)
然后是:
获取合适的格式化字符串:
$date = $dt->format('Y-m-d');
Run Code Online (Sandbox Code Playgroud)获取UNIX时间戳:
$timestamp = $dt->getTimestamp();
Run Code Online (Sandbox Code Playgroud)
然后直接传递给MySQL的FROM_UNIXTIME()函数:
INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
Run Code Online (Sandbox Code Playgroud)手动将字符串操作为有效的文字:
$parts = explode('/', $_POST['date']);
$date = "$parts[2]-$parts[0]-$parts[1]";
Run Code Online (Sandbox Code Playgroud)您的代码容易受到SQL注入攻击. 您确实应该使用预准备语句,将变量作为未针对SQL进行求值的参数传递到该语句中.如果您不知道我在说什么,或者如何解决它,请阅读Bobby Tables的故事.
此外,如在规定的出台对PHP手册章mysql_*功能:
此扩展自PHP 5.5.0起不推荐使用,不建议用于编写新代码,因为将来会删除它.相反,应该使用mysqli或PDO_MySQL扩展.另请参阅MySQL API概述,以便在选择MySQL API时获得进一步的帮助.
您似乎使用a DATETIME或TIMESTAMP列来保存日期值; 我建议您考虑使用MySQL的DATE类型.正如上文中DATE,DATETIME和TIMESTAMP类型:
该
DATE类型用于具有日期部分但没有时间部分的值.MySQL以'YYYY-MM-DD'格式检索并显示DATE值.支持的范围是'1000-01-01'到'9999-12-31'.该
DATETIME类型用于包含日期和时间部分的值.MySQLDATETIME以'YYYY-MM-DD HH:MM:SS'格式检索和显示值.支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'.该
TIMESTAMP数据类型被用于同时包含日期和时间部分的值.TIMESTAMP具有'1970-01-01 00:00:01'UTC到'2038-01-19 03:14:07'UTC 的范围.
Mih*_*rga 10
您应该考虑从该日期创建一个时间戳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 );
Run Code Online (Sandbox Code Playgroud)
$date_field = date('Y-m-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());
Run Code Online (Sandbox Code Playgroud)