powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Не удается запрос с выборкой по времени
7 сообщений из 7, страница 1 из 1
Не удается запрос с выборкой по времени
    #39646054
Grats
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Входные данные:
server firebird 1.5 на FreeBSD, ставился не мной, но все работает )
клиентское приложение на PHP 7.0, Ubuntu 16.04, модуль php-interbase взят с официального репозитория
база данных: win-1251, таблица:

Код: plaintext
1.
2.
create table action_log(
  rf_id integer not null,
  action_time timestamp not null)

цель - создать запрос из php с выборкой по времени события, пытаюсь в лоб

Код: plaintext
1.
2.
3.
$query = "SELECT * FROM action_log WHERE rf_id = 100 AND action_time > '2018-05-01'";
$rc = ibase_query($query) or die(ibase_errmsg());
while ($row = ibase_fetch_row($rc)) {echo $row[1].'<br>';}
echo $query;
* далее буду писать только изменения в запросе

через FlameRobin и IBExpert запрос прокатывает и выдает то, что мне от него и требуется, через страницу PHP начинаются проблемы. большая часть вариантов просто не выдает никаких результатов, как и ошибок (последняя строчка с эхо запроса, как раз для отлова die). Некоторые варианты выдают ошибку диалекта 1 и типа данных DATA. Опишу варианты, которые пробовал и не получилось

Код: plaintext
$query = "SELECT * FROM action_log WHERE rf_id = 100 AND action_time BETWEEN '2018-05-01' AND '2018-06-01'";
Код: plaintext
$query = "SELECT * FROM action_log WHERE rf_id = 100 AND action_time BETWEEN CAST(current_date||'09:00' AS datetime) AND CAST (current_date||'18:00' AS datetime)";
Код: plaintext
$query = "SELECT * FROM action_log WHERE rf_id = 100 AND CAST (action_time AS date) > CAST ('now' as date)";
Код: plaintext
$query = "SELECT * FROM action_log WHERE rf_id = 100 AND action_time BETWEEN CAST(current_date||'09:00' AS timestamp) AND CAST (current_date||'18:00' AS timestamp)";

Пробовал что-то еще, сейчас не вспомню, но все с результатом одним из двух - не получилось молча или не получилось с ошибкой

Код: plaintext
$query = "SELECT * FROM action_log WHERE rf_id = 100";
работает

Куда копать? А лучше прямо код для запроса за последний месяц (неделю/год)
...
Рейтинг: 0 / 0
Не удается запрос с выборкой по времени
    #39646066
Grats
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

там, где в запросе timestamp, выдается то же самое, сейчас скопирую сообщение об ошибке.

Dynamic SQL Error SQL error code = -104 Database SQL dialect 1 does not support reference to DATE datatype
...
Рейтинг: 0 / 0
Не удается запрос с выборкой по времени
    #39646067
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Grats,

ну использование die в php 7 говорит как минимум о низкой квалификации.
Если я правильно понимаю вы только пробуете, написанного кода ещё нет. Раз так то переходи сразу на PDO и будешь нормально обрабатывать исключения.
...
Рейтинг: 0 / 0
Не удается запрос с выборкой по времени
    #39646073
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Grats,

1. Если БД была создана в 1-м диалекте, то укажи в ibase_connect что работаешь с первым диалектом
2. current_date нет в 1-м диалекте
3. типа datetime в Firebird не существует

Самый первый вариант должен работать
...
Рейтинг: 0 / 0
Не удается запрос с выборкой по времени
    #39646076
Grats
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,
Да я, собственно, сисадмин, ващпе не пишу на огнептице. )
Просто сейчас скучно, пытаюсь сделать морду сотрудникам, чтоб от меня с вопросами отстали.
Ваш совет сейчас попробую.

$db = ibase_connect($database, $user, $password, $charset, 0, 1) or die(ibase_errmsg());

я правильно понял?
...
Рейтинг: 0 / 0
Не удается запрос с выборкой по времени
    #39646077
Grats
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ошибку не выдает, но и результатов тоже (
...
Рейтинг: 0 / 0
Не удается запрос с выборкой по времени
    #39646112
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Grats,

ну попробуй вот это

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
$dbh = ibase_connect($database, $user, $password, $charset, 0, 1) or die(ibase_errmsg());
$sql = 'SELECT * FROM action_log WHERE rf_id = 100 AND action_time BETWEEN ? AND ?';
$sth = ibase_prepare($dbh, $sql) or die(ibase_errmsg());
$rc = ibase_query($sth, '2018-05-01', '2018-06-01') or die(ibase_errmsg());
while ($row = ibase_fetch_row($rc)) {
  var_dump($row);
}
ibase_free_result($rc);
ibase_free_query($sth);
ibase_close($dbh);
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Не удается запрос с выборкой по времени
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]