Я использую сервис, который (должен) возвращает json с ответом на запрос sql для заполнения таблицы. В целях отладки я добавил полученную строку запроса в ответ, чтобы попробовать ее непосредственно в базе данных, и запрос работает в моей базе данных.
На самом деле я получаю следующие ошибки, когда я запускаю его из своего сервиса, и мне нужно решить эту проблему:
Неверный год в дате. Когда я иду на "и table.datefield> =
' "$ Дата."'
Недопустимый месяц в дате. При использовании "и table.datefield> =
{D ' "$ дата."'}
Оба с кодом ошибки 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
В какой-то момент 2-й вариант сверху сработал (он определяет год, так что я думаю, что это самый близкий подход), но он больше не работает. Я также не могу найти место, где я нашел документацию {d}, поэтому (которая решала ее в прошлом) любая ссылка также была бы оценена.
Еще одна вещь, которую я не могу использовать для этого 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);
}