我看了类似的问题,但我解决不了这个问题。我在MySql中有两个不同的列,类型分别为日期和时间。我用爆炸来把日期和时间分开。拆分代码如下所示;
$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
和CCD_。
有什么想法吗?解决方案?
何时应为NULL
:
$task_date = 'NULL';
$task_time = 'NULL';
您将变量设置为NULL
,当转换为字符串时,它将生成一个空字符串。mysql解析失败。
如果将变量设置为字符串'NULL'
,mysql将正确地将列设置为NULL
当它应该有实际值时,日期和时间需要用引号括起来。例如:
$task_date = "'".$date_time[0]."'";
$task_time = "'".$date_time[1]."'";
您的查询字符串没有正确地用引号括起来,我认为您需要在$task_date和$task_time周围加引号,因为它们目前似乎没有在查询字符串中验证。试试这些:
$query = 'call insertProcedure(...some variables..., "'.$task_date.'", "'.$task_time.'")';
$query = "call insertProcedure(...some variables..., '".$task_date."', '".$task_time."')";
编辑:显然你已经试过了。但在这种情况下,错误应该是不同的,是吗?
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;