IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.
Модератор: kdv
-
ivan1982
- Сообщения: 9
- Зарегистрирован: 23 ноя 2004, 15:32
Сообщение
ivan1982 » 23 ноя 2004, 15:40
Здравствуйте, коллеги.
Сталкнулся с такой проблнмой:
база:
Код: Выделить всё
SET SQL DIALECT 3;
CREATE DATABASE 'x.x.x.x:/var/interbase/stat2.gdb'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 4096
DEFAULT CHARACTER SET WIN1251;
таблица:
Код: Выделить всё
CREATE TABLE AGREEMENTS (
AID INTEGER NOT NULL,
CID INTEGER NOT NULL,
ATYPE INTEGER NOT NULL,
NUM VARCHAR (128) CHARACTER SET WIN1251 COLLATE WIN1251,
SDATE DATE,
EDATE DATE,
OSID INTEGER NOT NULL,
FIODIR VARCHAR (256) CHARACTER SET WIN1251 COLLATE WIN1251,
DELETED INTEGER,
COMMENT VARCHAR (256) CHARACTER SET WIN1251 COLLATE WIN1251);
коннект
Код: Выделить всё
function connect( $user = '', $pass = '', $db = '' ,$charset = '',$buffers = 0, $dialect = 3){
$this->conn = ibase_connect($db, $user, $pass, $charset, $buffers, $dialect);
// $this->conn = ibase_connect($db, $user, $pass, $charset);
print ibase_errmsg();
if ($this->conn){
ibase_timefmt('%d.%m.%Y %H:%M:%S');
ibase_timefmt('%H:%M:%S',IBASE_TIME);
ibase_timefmt('%d.%m.%Y',IBASE_DATE);
}
return $this->conn;
}
EMS Interbase/FireBird Manager отображает данные в таблице правильно
При выводе из php скрипта данных таблицы для некоторых aid из agreements поле sdate отображается правильно, а для некоторых ввиде TIMESTAMP соответсвующего хранящейся в поле дате.
Подскажите в чем может быть проблема?
Последний раз редактировалось
ivan1982 24 ноя 2004, 12:51, всего редактировалось 1 раз.
-
Dmitry Beloshistov
- Сообщения: 41
- Зарегистрирован: 27 окт 2004, 11:06
Сообщение
Dmitry Beloshistov » 24 ноя 2004, 12:38
ivan1982 писал(а):
EMS Interbase/FireBird Manager отображает данные в таблице правильно При выводе из php скрипта данных таблицы для некоторых aid из agreements поле sdate отображается правильно, а для некоторых ввиде TIMESTAMP соответсвующего хранящейся в поле дате.
Подскажите в чем может быть проблема?
Посмотри php.ini на наличие:
ibase.dateformat = "%d.%m.%Y";
ibase.timestampformat = "%d.%m.%Y %H:%M:%S";
ibase.timeformat = "%H:%M:%S";
-
ivan1982
- Сообщения: 9
- Зарегистрирован: 23 ноя 2004, 15:32
Сообщение
ivan1982 » 24 ноя 2004, 12:50
строчек таких не было...
пробовал их добавлять - не помогает...
функция ibase_timefmt() заменят эти дерективы
-
Dmitry Beloshistov
- Сообщения: 41
- Зарегистрирован: 27 окт 2004, 11:06
Сообщение
Dmitry Beloshistov » 24 ноя 2004, 12:59
ivan1982 писал(а):строчек таких не было...
пробовал их добавлять - не помогает...
функция ibase_timefmt() заменят эти дерективы
Хм... Вбей в ini настройки и все. Или тебе надо на лету менять формат вывода? Если нет - зачем тебе вообще эта ibase_timefmt()? По ходу дела ты (насколько помню php) просто получаешь формат даты от сервера.
-
ivan1982
- Сообщения: 9
- Зарегистрирован: 23 ноя 2004, 15:32
Сообщение
ivan1982 » 24 ноя 2004, 13:21
Так, по-моему меня не поняли...
Мне всего лишь нужно чтобы данные поля типа DATE отображались в нормальном формате (нормальный формат - хотя бы одинаково), а сейчас я получаю вот что:

Странная закономерность - 2 нормально, 2 коряво.
На экран выводится результат SELECT.
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 24 ноя 2004, 14:10
блин, ну PHP ваш глючит, эта самая функция ibase_timefmt().
поля DATE, TIME, TIMESTAMP с сервера клиенту приходят всегда только в числовом виде. и это дело клиента разобрать это число и показать в правильном формате.
кстати. поскольку "проблемное" число одинаковое, есть подозрение что это какая то кривая дата, правда какая именно, понять не могу. все равно ж в DATE хранится число дней. Либо эта функция так показывает null.
и вообще, прежде чем морочить голову людям, взял бы и посмотрел на эту же самую выборку в ЛЮБОМ ДРУГОМ НОРМАЛЬНОМ ИНСТРУМЕНТЕ. И сравнил, что там за дата и почему ibase_timefmt() так ее показывает.
p.s. сейчас совсем осерчаю и прибью этот топик как не относящийся к IB/FB

-
ivan1982
- Сообщения: 9
- Зарегистрирован: 23 ноя 2004, 15:32
Сообщение
ivan1982 » 24 ноя 2004, 14:33
да уже понятно что php...
EMS показывает правильно (кстати про это написано выше).
DELPHI тоже.
ЧЕРЕЗ API тоже всё нормально.
Сорри за ОффТоп.
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 24 ноя 2004, 15:39
интересно все же, что это за дата такая хитрая. случаем, не, 29 февраля?
-
ivan1982
- Сообщения: 9
- Зарегистрирован: 23 ноя 2004, 15:32
Сообщение
ivan1982 » 24 ноя 2004, 16:16
нет

.
Сегодняшняя. И вчерашняя.
это от конкретной даты не зависит. Я так понимаю что пхп не воспринимает последние 2 из 4х записей как тип DATE. А воспринимает их как INT. Может я конечно ошибаюсь...
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 24 ноя 2004, 20:59
думаю что ошибаешься. PHP не может воспринимать "две последние записи" иначе чем любые другие. При выполнении запроса с сервера сначала приходит однозначный список столбцов и их типов. И все поля всех записей выводятся в соответствии с этими типами. Поэтому если в разных записях одного результата виден разный формат вывода данных - то это косяк конкретной функции, преобразующей двоичное значение в строку.
-
flipper
Сообщение
flipper » 23 дек 2004, 07:17
а можешь привести код где ты все это дело делаешь(запрос) и выводишь?