Столкнулся с интересным глюком при выборке из базы Firebird 1.5 средствами PHP: Код (Text): $sql = "select zn1, zn3 from znachenie where znachenie_ui = 12"; $result = ibase_query($sql); while ($row = ibase_fetch_row($result)){ echo "Глюк <br>"; echo $row[0]; echo ": "; echo rtrim(rtrim($row[1], '0'), '.'); echo "<br>\n"; } // end while ibase_free_result($result); //Освобождаем память от запроса Так вот, если zn1 и zn3 являются типом numeric и если они целые числа, то выдаются уменьшенными в 10 раз! Глюк работает если таблица или выбираемое значение имеют название znachenie . Я в шоке! Если кто подскажет как обойти это странное явление, буду благодарен.
В этом случае возникает ibase_query() [function.ibase-query]: Dynamic SQL Error SQL error code = -104. Так как не опознается таблица. Если убрать кавычки с таблицы и с переменных условия, то запрос выполняется но возвращает вместо значений полей соответственно строки zn1, zn2. Обнаружил, что проблема с numeric более распространена, так как она была обнаружена и в таблицах с другими названиями таблиц и переменных. Интересно, что выборка сделаная самим Firebird в командной строке дает правильные значения, а вывод этого значения через print или echo дает значения уменьшенные в 10 раз. P.S.: Кстати пример для функции ibase_blob_get в документации сайта php.ru нерабочий. Исправленный вариант видел на http://www.php.net/manual/en/function.i ... ob-get.php .
Проверил на Firebird 2.0. Глюк тот же PHP версии 5. Дальше обновлять некуда Может это функция ibase_fetch_row глючит? Как можно посмотреть результаты запроса целиком в виде массива?
chemister напишите свою реализацию драйвера хотя тут пхп уже невыгоден, бинарные операции в нем через адский зад работают
Решил проблему приведением типа к совместимому с типами PHP: Код (Text): $sql = "select cast (zn1 as varchar(15)), cast (zn3 as varchar(15)) from znachenie where znachenie_ui = 12"; $result = ibase_query($sql); while ($row = ibase_fetch_row($result)){ echo "Результат <br>"; echo $row[0]; echo ": "; echo rtrim(rtrim($row[1], '0'), '.'); echo "<br>\n"; } // end while ibase_free_result($result); //Освобождаем память от запроса