Как из PHP запросить BOOLEAN поле из Firebird?

230
15 марта 2018, 10:54

Пример кода:

  $db = 'localhost:C:\...path...\dbname.fdb';
  $username = 'SYSDBA';
  $password = 'masterkey';
  // Подключение к БД
  $dbhandle = ibase_connect($db, $username, $password) or die ("error in db connect");
  $status = ($dbhandle != '');
  if ($status) {
    $sql = 'SELECT * FROM table_name';
    // Выполняем запрос
    $rc = ibase_query($dbhandle, $sql);
    echo "rc: ".$rc."]<br><br>";
    // Получаем результат построчно в виде объекта
    while ($row = ibase_fetch_object($rc)) {
      echo $row->FIELD_NAME."<br>";
    }
    // Освобождаем хэндл связанный с результатом запроса
    ibase_free_result($rc);
    // Освобождаем хэндл связанный с подключением
    ibase_close($dbhandle);
  }    

Если в списке полей выборки присутствует поле типа BOOLEAN, то получаю предупреждение

Warning: ibase_fetch_object(): Incorrect values within SQLDA structure empty pointer to data at SQLVAR index 5 in D:...\test.php on line 33

и никаких данных... Собственно вопрос, как обратиться к BOOLEAN полю? В Менеджере DB запрос отрабатывается корректно.

Answer 1

Вы пытаетесь выбрать поле с типом BOOLEAN. Суть в том, что этот тип появился гораздо позднее, чем произошло отделение FireBird от Interbase. Как следствие этот тип имеет разные идентификаторы и разную структуру в IB и FB.

  • Для Interbase этот тип имеет код 590, занимает два байта и может принимать значения FALSE, TRUE

  • В Firebird тип имеет код 32764, занимает один байт и принимает значения FALSE, TRUE, UNKNOWN.

Расширение php_interbase.dll предназначено для работы с Interbase и, соответственно, ничего о типе 32764 не знает.

Варианты решения проблемы

  • Использовать расширения php_pdo_firebird.dll
  • поискать в сети php_firebird.dll. Может кто-то занимался портированием php_interbase.dll под новые версии Firebird
  • продолжать использовать php_interbase.dll, но тогда отказаться от всего специфического для Firebird функционала
READ ALSO
Где лучше возвращать ошибку 404 в yii2

Где лучше возвращать ошибку 404 в yii2

В приложении в контроллере user есть несколько экшнов, каждый из которых получает из запроса параметр user_id и по нему ищет пользователя в бдОтсюда...

227
Не меняется версия PHP в PhpStorm

Не меняется версия PHP в PhpStorm

Создаю проект в PhpStorm, выбираю интерпретатор Php 72

220
Разница в способах включения файлов

Разница в способах включения файлов

В чем разница include() и require(), а также include_once() и require_once()? Не могу понять

166
Прочитать многомерный массив foreach

Прочитать многомерный массив foreach

Вычитываю JSON ответ, в нем много мерный массив, делаю это так :

239