日期格式在使用Informix的PHP查询中失败(基于SQL)

时间:2019-01-15 13:44:42

标签: php sql date informix

我正在运行一个服务,该服务(应该)返回一个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);
}

1 个答案:

答案 0 :(得分:0)

好的,我在这里找到了问题。 它应该返回“没有符合条件的结果”错误,而不是完全误导我的“ format_error”错误。

将数据库中的某些db空日期字符串与提供的日期进行比较时发生此错误。

如果没有数据满足,它将失败;如果提供的日期满足要求,则将成功,因此可以正常工作! 希望将来对其他人有帮助。