PHP mysql插入日期表格

我正在使用jQuery 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';
?>

我确定我的插入内容正确无误。

Butternut asked 2019-11-08T11:50:05Z
8个解决方案
168 votes

如日期和时间文字中所述:

MySQL可以使用以下格式识别'YYYY-MM-DD'值:

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

  • 如果字符串不带分隔符,则格式为TIMESTAMPTIMESTAMP,前提是该字符串作为日期有意义。 例如,将'1970-01-01 00:00:01''2038-01-19 03:14:07'解释为'9999-12-31 23:59:59',但'071332'是非法的(具有无意义的月份和日期部分),并变成'0000-00-00'

  • 作为TIMESTAMPTIMESTAMP217格式的数字,条件是该数字应作为日期使用。 例如,将'1970-01-01 00:00:01''2038-01-19 03:14:07'解释为'9999-12-31 23:59:59'

因此,字符串TIMESTAMP不是有效的MySQL日期文字。 您有四个选择(按某种模糊的优先顺序,而没有您的要求的任何进一步信息):

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

    TIMESTAMP
    TIMESTAMP

    或者,如果您希望用户看到TIMESTAMP格式的日期,只需设置TIMESTAMP选项即可:

    TIMESTAMP
  2. 使用MySQL的TIMESTAMP函数转换字符串:

    TIMESTAMP
  3. 将从jQuery接收的字符串转换为PHP可以理解为日期的内容,例如TIMESTAMP对象:

    TIMESTAMP

    然后:

    • 获取合适的格式化字符串:

      TIMESTAMP
    • 获取UNIX时间戳:

      TIMESTAMP

      然后将其直接传递给MySQL的TIMESTAMP函数:

      TIMESTAMP
  4. 手动将字符串转换为有效的文字:

    TIMESTAMP

警告

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

  2. 另外,如TIMESTAMP函数的PHP手册章节简介中所述:

    自PHP 5.5.0起不推荐使用该扩展,不建议编写新代码,因为将来会删除该扩展。 相反,应使用mysqli或PDO_MySQL扩展名。 另请参见MySQL API概述,以获取选择MySQL API时的更多帮助。

  3. 您似乎在使用TIMESTAMPTIMESTAMP列来保存日期值; 我建议您考虑改用MySQL的'1970-01-01 00:00:01'类型。 如TIMESTAMPTIMESTAMP'1970-01-01 00:00:01'类型中所述:

    TIMESTAMP类型用于具有日期部分但没有时间部分的值。 MySQL检索并以TIMESTAMP格式显示DATE值。 支持的范围是'1970-01-01 00:00:01''2038-01-19 03:14:07'

    TIMESTAMP类型用于包含日期和时间部分的值。 MySQL检索并以'1970-01-01 00:00:01'格式显示TIMESTAMP值。 支持的范围是'2038-01-19 03:14:07''9999-12-31 23:59:59'

    TIMESTAMP数据类型用于包含日期和时间部分的值。 TIMESTAMP的范围是'1970-01-01 00:00:01' UTC到'2038-01-19 03:14:07' UTC。

eggyal answered 2019-11-08T11:53:27Z
10 votes

您应该考虑从该日期创建一个时间戳,即为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 );
Mihai Iorga answered 2019-11-08T11:54:01Z
7 votes
$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());
Kishan Chauhan answered 2019-11-08T11:54:24Z
1 votes

您必须确保jQuery输出上的日期格式为YYYY-MM-DD。 我可以看到jQuery返回MM-DD-YYYY,这不是有效的MySQL日期格式,这就是为什么它返回错误的原因。

要将其转换为正确的,可以执行以下操作:

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

然后您将获得格式化的日期,该日期将是有效的MySQL格式,即YYYY-MM-DD,即2012-08-25

我还建议您在将数据插入数据库时使用mysql_real_escape_string,以防止SQL注入作为一种快速解决方案,或者更好地使用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() );
Ilia Rostovtsev answered 2019-11-08T11:55:28Z
0 votes

最简单的方法是

$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());
William Worley answered 2019-11-08T11:55:58Z
0 votes

使用以下方法从jquery日期选择器中获取日期对象

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

对于mysql,日期必须采用正确的格式。 处理任何时区问题的一种方法是使用moment.js

moment(myDate).format('YYYY-MM-DD HH:mm:ss')
ykay answered 2019-11-08T11:56:35Z
-2 votes

尝试这样的事情。

echo "The time is " . date("2:50:20");
$d=strtotime("3.00pm july 28 2014");
echo "Created date is " . date("d-m-y h:i:sa",$d);
shubham prajapati answered 2019-11-08T11:57:01Z
-2 votes

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

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

您必须将日期包含在单棚('')中

希望对您有所帮助。

Anand Raj Mehta answered 2019-11-08T11:57:45Z
translate from https://stackoverflow.com:/questions/12120433/php-mysql-insert-date-format