我正在运行一个服务,该服务(应该)返回一个json以及来自sql查询的响应以填充表格。出于调试目的,我已将结果查询字符串添加到响应中,以便直接在数据库上进行尝试,并且该查询在我的数据库中有效。 当我从服务运行它时,实际上我收到以下错误,我需要解决此问题:
日期无效。当我去“和table.datefield> = '“。$ date。”'
日期无效。当使用“ and table.datefield> = {d'“。$ date。”'}
两者都带有HY000错误代码。 (以下说明)
SQLSTATE [HY000]:常规错误:-1204 [Informix] [Informix ODBC 驱动程序] [Informix]无效的年份(SQLPrepare [-1204]位于 /usr/PRODUCTO/apache_jano/PDO_INFORMIX-1.3.3/informix_driver.c:131) ISAM:264
SQLSTATE [HY000]:常规错误:-1205 [Informix] [Informix ODBC 驱动程序] [Informix]日期中无效的月份(SQLPrepare [-1205]位于 /usr/PRODUCTO/apache_jano/PDO_INFORMIX-1.3.3/informix_driver.c:131) ISAM:264
在某些时候,上面的第二个选项起作用了(它检测到年份,所以我认为它是最接近的方法),但现在不再有效。我或者找不到我找到{d}文档的地方,所以(过去解决了它),任何链接也将不胜感激。 我不能再使用bind_params来做这件事(我被明确告知要在没有此情况下这样做)。
这是失败的部分(在我的查询中删除此条件非常有效)
在dbeaver中有效并从响应字符串获取的SQL代码条件:
AND (
(table.fecha_inicial <= { d '2018-07-15' }AND (table.fecha_final >= { d '2019-07-15' }OR table.fecha_final IS NULL))
OR
(table.fecha_inicial >= { d '2018-07-15' }AND (table.fecha_final <= { d '2019-07-15' } OR table.fecha_final IS NULL)))
PHP编码
if ($fechaInicio){ $fechaInicio = date('Y-m-d', strtotime($fechaInicio));}
if ($fechaFin){ $fechaFin = date('Y-m-d', strtotime($fechaFin));}
$cond_fechas = " AND ( (table.fecha_inicial <= '".$fechaInicio."' AND (table.fecha_final >= {d'".$fechaFin."'} OR table.fecha_final IS NULL)) "
. " OR (table.fecha_inicial >= '".$fechaInicio."' AND (table.fecha_final <= {d'".$fechaFin."'} OR table.fecha_final IS NULL)))";
$result['query'] = $query;
$conn = DB::getConnection('bbdd');
$result['das']= $conn->preparedQuery($query);
if (isset($result['das'])) {
return JwtCheckHeader::json($result['das']);
} else {
return JwtCheckHeader::json($result);
}
答案 0 :(得分:0)
好的,我在这里找到了问题。 它应该返回“没有符合条件的结果”错误,而不是完全误导我的“ format_error”错误。
将数据库中的某些db空日期字符串与提供的日期进行比较时发生此错误。
如果没有数据满足,它将失败;如果提供的日期满足要求,则将成功,因此可以正常工作! 希望将来对其他人有帮助。