php mysql查询不发送要插入的日期和时间类型null

时间:2012-02-20 20:56:27

标签: php mysql

我看了类似的问题,但我无法解决问题。我在MySql中有2个不同的列,其中包含日期和时间类型。我使用explode来分割日期。拆分代码如下:

$task_date_time = $data['task_date_time'];

if($task_date_time != "")
{           
    $date_time = explode(" ", $task_date_time); // split according to the delimiter
    $task_date = $date_time[0];         
    $task_time = $date_time[1];         
}
else
{           
    $task_date = NULL;
    $task_time = NULL;          
}

之后,我调用php函数将这些变量插入MySQL数据库。我在数据函数中的查询如下:

$query = "call insertProcedure(...some variables...,  ".$task_date.", ".$task_time.")";

但是,查询会出现以下错误;

Error : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':48)' at line 1
  • ':48)'字段对应于时间类型的分钟字段。

注意:

1)我也尝试了下面的查询字符串。它不起作用

$query = "call insertProcedure(...some variables...,  '".$task_date."', '".$task_time."')";

2)$task_date$task_time在MySQL数据库中可以为空。

有什么想法吗?解决方案?

3 个答案:

答案 0 :(得分:2)

应该是NULL

$task_date = 'NULL';
$task_time = 'NULL';

您将变量设置为NULL,当转换为字符串时会产生空字符串。并且mysql无法解析它。

如果将变量设置为字符串'NULL',mysql会将列正确设置为NULL

当它应该具有实际值时,日期和时间需要用引号括起来。 e.g:

$task_date = "'".$date_time[0]."'";         
$task_time = "'".$date_time[1]."'";     

答案 1 :(得分:1)

你的查询字符串没有被引号正确包围,我相信你需要在$ task_date和$ task_time周围加上引号,因为它们目前似乎没有在查询字符串中验证。试试这些:

$query = 'call insertProcedure(...some variables...,  "'.$task_date.'", "'.$task_time.'")';

$query = "call insertProcedure(...some variables...,  '".$task_date."', '".$task_time."')";
编辑:显然你已经尝试过了。但在这种情况下,错误应该是不同的,是吗?

答案 2 :(得分:1)

MySQL预计时间格式为" HH:mm:ss",您不包括秒数,因此需要附加' 00'在最后,即

$query = "CALL insertProcedure(...some variables...,  '".$task_date."'), '".$task_time.":00')";

您可以通过手动执行以下查询来自行查看

SELECT TIME('12:34') AS fails, TIME('12:34:00') AS succeeds;