我看了类似的问题,但我无法解决问题。我在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数据库中可以为空。
有什么想法吗?解决方案?
答案 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;