ibase_blob_get

(PHP 5, PHP 7 < 7.4.0)

ibase_blob_get从打开的 BLOB 中获取 len 字节的数据

描述

ibase_blob_get(resource $blob_handle, int $len): string

此函数从通过 ibase_blob_open() 打开以供读取的 BLOB 中返回最多 len 字节的数据。

注意:

无法从通过 ibase_blob_create() 打开以供写入的 BLOB 中读取数据。

参数

blob_handle

使用 ibase_blob_open() 打开的 BLOB 句柄。

len

返回数据的长度。

返回值

返回 BLOB 中最多 len 字节的数据,或者在失败时返回 false

范例

范例 #1 ibase_blob_get() 示例

<?php
$result
= ibase_query("SELECT blob_value FROM table");
$data = ibase_fetch_object($result);
$blob_data = ibase_blob_info($data->BLOB_VALUE);
$blob_hndl = ibase_blob_open($data->BLOB_VALUE);
echo
ibase_blob_get($blob_hndl, $blob_data[0]);
?>
虽然这个例子并没有比 `ibase_blob_echo($data->BLOB_VALUE)` 做更多的事情,但它向你展示了如何将信息获取到一个变量中,以便你随意操作。

参见

添加注释

用户贡献的注释 3 notes

up
4
hamacker
19 年前
第一个例子是错误的,缺少 `ibase_blob_close()` 函数。
正确的例子是
<?php
$sql
= "SELECT blob_value FROM table";
$result = ibase_query($sql);
$data = ibase_fetch_object($result);
$blob_data = ibase_blob_info($data->BLOB_VALUE);
$blob_hndl = ibase_blob_open($data->BLOB_VALUE);
print
ibase_blob_get($blob_hndl, $blob_data[0]);
// 没有关闭 BLOB 连接,PHP 和 ibase_blob_get() 无法运行。
ibase_blob_close($blob_hndl);
?>
up
1
trinite at trinite dot mine dot nu
18 年前
上面提到的方法无法处理分段的 BLOB。为了解决这个问题,我使用了以下方法
(顺便说一下,`$result->MFOTO` 是数据库中的图像)

<?php
$result
= ibase_fetch_object($result);

/*
ibase_blob_info 数组:
[0] bloblength(总长度)
[1] 段数
[2] 最大段的大小
[3] 流式或分段 BLOB
[4] ??
*/
$blobinfo = ibase_blob_info($result->MFOTO);

$blobhandle = ibase_blob_open($result->MFOTO);
for(
$i = 0; $i < $blobinfo[1]; $i++){
$readsize = $blobinfo[2];
if(
$i == ($blobinfo[1] - 1)){
$readsize = $blobinfo[0] - (($blobinfo[1] - 1) * $blobinfo[2]);
}
$totalimage .= ibase_blob_get($blobhandle, $readsize);
}
ibase_blob_close($blobhandle);
echo
$totalimage;
?>

这应该可以解决问题;)
up
0
sol at nospam dot example dot com
21 年前
我发现了像这样的例子

`$sql = "SELECT ID, CONTENTTYPE, BLOBSIZE, DATA,NAME ";`
`$sql.= " FROM OM_BLOB WHERE ID = 42";`
`$result = ibase_query($sql);`
`while ($row=ibase_fetch_object($result))`
{
`$blob_data = ibase_blob_info( $row->DATA);`
`$blob_hndl = ibase_blob_open($row->DATA);`
`$image = ibase_blob_get( $blob_hndl, $blob_data[0]);`
}
但是对于大型 BLOB 来说,这将无法正常工作。

对于大型 BLOB,一种解决方案是通过块来检索它们

`$sql = "SELECT ID, CONTENTTYPE, BLOBSIZE, DATA,NAME ";`
`$sql.= " FROM OM_BLOB WHERE ID = 42";`
`$result = ibase_query($sql);`
`while ($row=ibase_fetch_object($result))`
{
`$image = ibase_blob_get($blob_hndl,8192);`
`while($data = ibase_blob_get($blob_hndl, 8192)){`
`$image .= $data;`
}
}
To Top