使用 informix(基于 SQL)的 php 查询中的日期格式失败
Date format is failing in php query using informix (SQL-based)
我正在 运行ning 服务,该服务(应该)returns json 具有来自 sql 查询的响应以填充 table .出于调试目的,我已将生成的查询字符串添加到响应中,以直接在数据库上尝试它,并且查询在我的数据库中有效。
实际上,当我从我的服务 运行 收到以下错误时,我需要解决这个问题:
Invalid year in date. When i go for "and table.datefield >=
'".$date."'
Invalid month in date. When using "and table.datefield >=
{d'".$date."'}
两者都有 HY000 错误代码。 (下面的描述)
SQLSTATE[HY000]: General error: -1204 [Informix][Informix ODBC
Driver][Informix]Invalid year in date (SQLPrepare[-1204] at
/usr/PRODUCTO/apache_jano/PDO_INFORMIX-1.3.3/informix_driver.c:131)
ISAM: 264
SQLSTATE[HY000]: General error: -1205 [Informix][Informix ODBC
Driver][Informix]Invalid month in date (SQLPrepare[-1205] at
/usr/PRODUCTO/apache_jano/PDO_INFORMIX-1.3.3/informix_driver.c:131)
ISAM: 264
在某些时候,上面的第二个选项起作用了(它检测到年份,所以我认为它是最接近的方法),但它不再起作用了。我也找不到我找到 {d} 文档的地方(过去解决了它),任何 link 也将不胜感激。
还有一件事我不能为此使用 bind_params(我被明确告知没有这个就可以这样做)。
这是失败的部分(在我的查询中删除这个条件是完美的)
SQL 在 dbeaver 中工作并取自响应字符串的代码条件:
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);
}
好的,我在这里发现了问题。
它应该 return 一些 "no results matching your conditions" 的错误而不是 "format_error" 这完全误导了我。
将数据库中的某些数据库空日期字符串与提供的日期进行比较时发生此错误。
当没有数据满足时失败,当提供的日期满足要求时成功,所以它起作用了!
希望以后能对其他人有所帮助。
我正在 运行ning 服务,该服务(应该)returns json 具有来自 sql 查询的响应以填充 table .出于调试目的,我已将生成的查询字符串添加到响应中,以直接在数据库上尝试它,并且查询在我的数据库中有效。 实际上,当我从我的服务 运行 收到以下错误时,我需要解决这个问题:
Invalid year in date. When i go for "and table.datefield >= '".$date."'
Invalid month in date. When using "and table.datefield >= {d'".$date."'}
两者都有 HY000 错误代码。 (下面的描述)
SQLSTATE[HY000]: General error: -1204 [Informix][Informix ODBC Driver][Informix]Invalid year in date (SQLPrepare[-1204] at /usr/PRODUCTO/apache_jano/PDO_INFORMIX-1.3.3/informix_driver.c:131) ISAM: 264
SQLSTATE[HY000]: General error: -1205 [Informix][Informix ODBC Driver][Informix]Invalid month in date (SQLPrepare[-1205] at /usr/PRODUCTO/apache_jano/PDO_INFORMIX-1.3.3/informix_driver.c:131) ISAM: 264
在某些时候,上面的第二个选项起作用了(它检测到年份,所以我认为它是最接近的方法),但它不再起作用了。我也找不到我找到 {d} 文档的地方(过去解决了它),任何 link 也将不胜感激。 还有一件事我不能为此使用 bind_params(我被明确告知没有这个就可以这样做)。
这是失败的部分(在我的查询中删除这个条件是完美的)
SQL 在 dbeaver 中工作并取自响应字符串的代码条件:
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);
}
好的,我在这里发现了问题。 它应该 return 一些 "no results matching your conditions" 的错误而不是 "format_error" 这完全误导了我。
将数据库中的某些数据库空日期字符串与提供的日期进行比较时发生此错误。
当没有数据满足时失败,当提供的日期满足要求时成功,所以它起作用了! 希望以后能对其他人有所帮助。