我似乎无法找到一种将二进制数据从 SQL 服务器读取到 PHP 中的方法。我正在做一个项目,我需要能够将图像直接存储在 SQL 表中,而不是文件系统上。
目前,我一直在使用这样的查询:
INSERT INTO myTable(Document) SELECT * FROM OPENROWSET(BULK N'C:\image.jpg', SINGLE_BLOB) as BLAH
这可以很好地将图像实际插入表中,但我还没有找到一种方法来检索它并取回我的图像。
我正在使用 PHP 执行此操作,最终将不得不用它创建一个存储过程,但是任何人都可以启发我获取二进制数据(varbinary(MAX))并动态生成图像的方法。
我希望使用SELECT语句并将内容类型添加到表明它是图像的标题中会很简单,但它根本不起作用。相反,该页面将仅显示文件的名称,这是我过去遇到的并理解为图像数据错误。
编辑:我想我想通了。从存储过程读取时,SQL Server 仅发送最多 8000 个字节,因此导致我正在测试的图像中断。
$q = "Get_Picture_Test_SP @pk_rms_id=1443546";
$res = mssql_query($q);
$row = mssql_fetch_assoc($res);
$image = $row['图片'];
函数 hex2bin($h)
{
if (!is_string($h)) 返回空值;
$r='';
for ($a=0; $a<strlen($h); $a+=2) { $r.=chr(hexdec($h{$a}.$h{($a+1)})); }
返回 $r;
}
$image = hex2bin($image);
header("内容类型:图片/gif");
打印$图像;
出口;
?>
这就是我必须显示图像的方式。感谢您提及十六进制提示,这使我能够找出问题所在。