我似乎无法找到一种将二进制数据从 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"); 打印$图像; 出口; ?>
这就是我必须显示图像的方式。感谢您提及十六进制提示,这使我能够找出问题所在。