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

php mysql查询不';t发送要插入的日期和时间类型null,php,mysql,Php,Mysql,我看了类似的问题,但我不能解决这个问题。我在MySql中有两个不同的列,类型分别为date和time。我使用explode从时间分割日期。拆分代码如下所示 $task_date_time = $data['task_date_time']; if($task_date_time != "") { $date_time = explode(" ", $task_date_time); // split according to the delimiter $

我看了类似的问题,但我不能解决这个问题。我在MySql中有两个不同的列,类型分别为date和time。我使用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;          
}
$query = "call insertProcedure(...some variables...,  ".$task_date.", ".$task_time.")";
之后,我调用php函数将这些变量插入MySQL数据库。我在data函数中的查询如下:

$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;          
}
$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) MySQL数据库中的
$task\u date
$task\u time
可为空


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

您的查询字符串没有正确地用引号括起来,我认为您需要在$task\u日期和$task\u时间周围加上引号,因为它们目前似乎在查询字符串中无法验证。试试这些:

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

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

编辑:显然你已经试过了。但是,在这种情况下,错误应该不同,是吗?

您的查询字符串没有正确地用引号括起来,我认为您需要在$task\u日期和$task\u时间周围加引号,因为它们目前似乎在查询字符串中无法验证。试试这些:

$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;

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;

当它应该为空时:

$task_date = 'NULL';
$task_time = 'NULL';
您正在将变量设置为
NULL
,当转换为字符串时,将生成一个空字符串。mysql无法解析它

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

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

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

当它应该为空时:

$task_date = 'NULL';
$task_time = 'NULL';
您正在将变量设置为
NULL
,当转换为字符串时,将生成一个空字符串。mysql无法解析它

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

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

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


您能提供一个d/t字符串示例吗?您能回显您在“Notes”第1点中发布的$query吗?我很好奇查询本身是什么,也许你在错误的地方寻找问题。task\u date\u time只是一个json变量。例如,“20/02/2012 22:48”您能提供一个d/t字符串示例吗?您能回显您在“备注”第1点中发布的$query吗?我很好奇查询本身是什么,也许你在错误的地方寻找问题。task\u date\u time只是一个json变量。例如,“20/02/2012 22:48”我尝试了这个查询。如果日期和时间都不为空,则日期正确,但时间为00:00。如果两者都为空,则日期正确,时间为00:00添加了处理时间戳转换的逻辑+添加了返回MySQL以拆分时间段和日期段我不需要再次拆分日期字段。我的sql过程通过STR_-TO_-DATE格式转换来处理这个问题,但是谢谢:DMoreover,类型不是DATETIME。我们分别使用日期和时间类型。不管是DATETIME,date()提取日期部分,time()提取时间部分,只需首先保存拆分,但如果您已经在执行Stru TO_date操作,这不是问题。然后将其更新为:00,就像我做的测试一样,TIME('12:34')返回NULL,TIME('12:34:00')返回'12:34:00'时间值我尝试了该查询。如果日期和时间都不为空,则日期正确,但时间为00:00。如果两者都为空,则日期正确,时间为00:00添加了处理时间戳转换的逻辑+添加了返回MySQL以拆分时间段和日期段我不需要再次拆分日期字段。我的sql过程通过STR_-TO_-DATE格式转换来处理这个问题,但是谢谢:DMoreover,类型不是DATETIME。我们分别使用日期和时间类型。不管是DATETIME,date()提取日期部分,time()提取时间部分,只需首先保存拆分,但如果您已经在执行Stru TO_date操作,这不是问题。然后将其更新为:00,就像我做的测试一样,时间('12:34')返回NULL,而时间('12:34:00')返回'12:34:00'时间值几乎正确,但当我输入一个不为NULL的日期时,日期字段为NULL。这几乎正确,但当我输入一个不为NULL的日期时,日期字段为NULL。