Проблемы с Firebird BLOB

dmitrij

Новичок
Проблемы с Firebird BLOB

В Firebird 1.5 текст храню в поле BLOB SUB_TYPE 1

В менеджере все текста видно ок, но из PHP при попытке выборки данный пишет

Warning: ibase_blob_info() [function.ibase-blob-info]: BLOB not found

В чем может быть проблема?

UPD:

Вот код функции которую использую для получения текста:


function ibase_gettext($blob_field){
global $DB_LINK;
$blob_data = @ibase_blob_info($blob_field);
$blob_hndl = @ibase_blob_open($blob_field);
$text = @ibase_blob_get($blob_hndl, $blob_data[0]);
@ibase_blob_close($blob_hndl);
return $text;
}

Вот структура таблицы:

CREATE TABLE PAYMENT_METHODS (
ID INTEGER NOT NULL,
CODE VARCHAR(20) CHARACTER SET NONE COLLATE NONE,
PAYMENT_PERIOD_DAYS SMALLINT,
MIN_WITHDRAW_AMOUNT NUMERIC(12, 6),
"TYPE" SMALLINT,
CURRENCY_ID INTEGER NOT NULL,
OPEN_TYPE SMALLINT,
WITHDRAW_STATUS SMALLINT,
ICON_FILENAME VARCHAR(50) CHARACTER SET NONE COLLATE NONE,
PAY_INSTRUCTION BLOB SUB_TYPE 1 CHARACTER SET WIN1251,
INSTRUCTION_ENABLED SMALLINT,
IS_PROGRAM SMALLINT,
PAYMENT_PAGE_HTML BLOB SUB_TYPE 1 CHARACTER SET WIN1251,
STATUS SMALLINT);

Падает при:

$row = ibase_fetch_object(ibase_query($DB_LINK,"select * from $table where id=$id"));
if ($row->PAY_INSTRUCTION){
$pay_instruction = ibase_gettext($row->PAY_INSTRUCTION);
}
 

dmitrij

Новичок
вот код

function ibase_gettext($blob_field){
global $DB_LINK;
$blob_data = @ibase_blob_info($blob_field);
$blob_hndl = @ibase_blob_open($blob_field);
$text = @ibase_blob_get($blob_hndl, $blob_data[0]);
@ibase_blob_close($blob_hndl);
return $text;
}

Вот структура таблицы:

CREATE TABLE PAYMENT_METHODS (
ID INTEGER NOT NULL,
CODE VARCHAR(20) CHARACTER SET NONE COLLATE NONE,
PAYMENT_PERIOD_DAYS SMALLINT,
MIN_WITHDRAW_AMOUNT NUMERIC(12, 6),
"TYPE" SMALLINT,
CURRENCY_ID INTEGER NOT NULL,
OPEN_TYPE SMALLINT,
WITHDRAW_STATUS SMALLINT,
ICON_FILENAME VARCHAR(50) CHARACTER SET NONE COLLATE NONE,
PAY_INSTRUCTION BLOB SUB_TYPE 1 CHARACTER SET WIN1251,
INSTRUCTION_ENABLED SMALLINT,
IS_PROGRAM SMALLINT,
PAYMENT_PAGE_HTML BLOB SUB_TYPE 1 CHARACTER SET WIN1251,
STATUS SMALLINT);

Падает при:

$row = ibase_fetch_object(ibase_query($DB_LINK,"select * from $table where id=$id"));
if ($row->PAY_INSTRUCTION){
$pay_instruction = ibase_gettext($row->PAY_INSTRUCTION);
}
 

delhin

Новичок
убираем собак перед вызовами ф-ций и смотрим в лог, какие варнинги выкидывает ibase_хххи
и попробовать как работает код без обрамления в ф-цию.
 

dmitrij

Новичок
Автор оригинала: delhin
убираем собак перед вызовами ф-ций и смотрим в лог, какие варнинги выкидывает ibase_хххи
и попробовать как работает код без обрамления в ф-цию.
без собак как раз и пишет
Warning: ibase_blob_info() [function.ibase-blob-info]: BLOB not found

на первой функции, а остальные валятся т.к. первая не сработала.

Что в функции, что без -одно и то же.
 

delhin

Новичок
если SUB_TYPE сменить у BLOBа, так же себя ведет ?

-~{}~ 03.03.06 12:25:
$_ilink=ibase_connect('localhost:х:\хх\хх.fdb','SYSDBA','masterkey','WIN1251',0,3);

$_query='select * from payment_methods';
$prep=ibase_prepare($_ilink,$_query);
$res=ibase_execute($prep);

$_blob=array();
$fields_info=array();

$coln = ibase_num_fields($res);

for ($i=0; $i < $coln; $i++) {
$col_info = ibase_field_info($res, $i);
switch ($col_info['type']){
case 'BLOB':
$_blob[]=$col_info['alias'];
}
$fields_info[$col_info['name']]=$col_info;
}
$cnt=0;
while( $row = ibase_fetch_object($res) ){
$_result[$cnt] = get_object_vars($row);
for( $j=0;$j<count( $_blob );$j++ ){
if( !is_null( $_result[$cnt][$_blob[$j]] ) ){
$blob_data=ibase_blob_info( $row->$_blob[$j] );
$blob_hndl=ibase_blob_open( $row->$_blob[$j] );
$_result[$cnt][$_blob[$j]]=ibase_blob_get( $blob_hndl,$blob_data[0] );
ibase_blob_close( $blob_hndl );
}
}
$cnt++;

}
print_r($_result);

вот этот код 100%-тов работает на твоих метаданных

-~{}~ 03.03.06 12:30:

Вывод print_r($_result);
В один из блобов я специально дял проверки загнал управляющие символы

Array
(
[0] => Array
(
[ID] => 1
Код:
 => 1234
            [PAYMENT_PERIOD_DAYS] => 8
            [MIN_WITHDRAW_AMOUNT] => 65.600000
            [TYPE_] => 1
            [CURRENCY_ID] => 810
            [OPEN_TYPE] => 1
            [WITHDRAW_STATUS] => 1
            [ICON_FILENAME] => 123
            [PAY_INSTRUCTION] => 123
123
12
3
12
3sdfыва
цукЦУкцу
к
цу
к
цу
к
цу
к
            [INSTRUCTION_ENABLED] => 1
            [IS_PROGRAM] => 1
            [PAYMENT_PAGE_HTML] => 0/
            [STATUS] => 1
        )

)
 
Сверху