尝试将输入类型日期插入到date类型的mysql列中会引发SQL错误

时间:2015-05-07 13:27:18

标签: php mysql sql date

我的表单中有两个名为from dateto date的字段,两个字段都有输入日期。我在数据库中插入这两个字段,列类型为date。

我的HTML看起来像:

<form class="" action='a.php' method="POST">
<label for="From_date" class="left-text">From Date:</label>

<input type="date" name="from_date" maxlength=""   id="fromdate" placeholder="" class="input-xlarge">
<label for="To_date" class="left-text">To Date:</label>

<input type="date" name="to_date" maxlength=""   id="todate" placeholder="" class="input-xlarge">

我的php看起来像这样:

<?php error_reporting(E_ALL); ini_set('display_errors', 1);
DEFINE ('DB_USER', 'root');
DEFINE ('DB_PASSWORD', '');
DEFINE ('DB_HOST', 'localhost');
DEFINE ('DB_NAME', 'ads');

$link = @mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) 
  OR die("could not connect");

$from_date= mysqli_real_escape_string($link,$_POST['from_date']);
$from_date = date("Y-m-d", strtotime($from_date));

$to_date= mysqli_real_escape_string($link,$_POST['to_date']);
$to_date= date("Y-m-d", strtotime($to_date));

在我的插入声明中,我这样做:

$sql = "INSERT INTO airport_data (From_date,To_date) VALUES ('$from_date','$to_date')";

但这会引发我的错误:

  

无法执行INSERT INTO表(From_date,To_date)VALUES(2015-05-27,2015-05-15)。您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在第1行附近使用#xx; From_date,To_date)VALUES(2015-05-27,2015-05-15)正确的语法

我尝试从表单中更改日期格式:

$to_date = date('Y-m-d', strtotime(str_replace('-','/', $to_date)));
$from_date = date('Y-m-d', strtotime(str_replace('-','/', $from_date)));

但这并没有解决问题。

问题出在哪里,我无法将从表单收到的日期插入我的数据库表中?

1 个答案:

答案 0 :(得分:2)

我会做类似的事情:

$from_date = new DateTime($_POST['from_date']);
$to_date = new DateTime($_POST['to_date']);

// Insert the following into the database
$from_date = mysqli_real_escape_string($link, $from_date->format('Y-m-d'));
$to_date = mysqli_real_escape_string($link, $to_date->format('Y-m-d'));

// If you want those slashes
$from_date = mysqli_real_escape_string($link, $from_date->format('Y/m/d'));
$to_date = mysqli_real_escape_string($link, $to_date->format('Y/m/d'));

对于您的查询:

$sql = "INSERT INTO airport_data
(From_date, To_date)
VALUES ('".$from_date."','".$to_date."')
";

以您希望的方式输出日期的简单而优雅的方式。