当前位置: 首页 > 面试题库 >

帮助从SQL Server读取二进制图像数据到PHP

景凌
2023-03-14
问题内容

我似乎无法找出一种将SQL Server中的二进制数据读取到PHP中的方法。我正在一个项目中,我需要能够将图像直接存储在SQL表中,而不是文件系统中。

目前,我一直在使用这样的查询:

插入到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['picture'];

function hex2bin($h)
  {
  if (!is_string($h)) return null;
  $r='';
  for ($a=0; $a<strlen($h); $a+=2) { $r.=chr(hexdec($h{$a}.$h{($a+1)})); }
  return $r;
  }

$image = hex2bin($image);

header("Content-type: image/gif");

print $image;

exit; 
?>

这就是我必须显示图像的方式。感谢您提到六角头,这使我能够找出问题所在。


问题答案:

没有使用SQLServer的经验,但是我确实在MySQL中使用过BLOB。您有两种选择,

  1. 转义二进制数据,使其可以在SQL查询中使用。您可以通过在插入数据之前使用addslashes()以及在数据返回时使用stripslashes()来实现。

  2. 使用SQL查询的十六进制语法。

不确定这是否是标准SQL,但在MySQL中,您可以像这样将BLOB读为十六进制,

 select hex(image) from table;

您可以在SQL中像X‘1234ABCD’这样将二进制数据写为十六进制。

PHP提供了hex2bin / bin2hex,因此您可以轻松进行转换。



 类似资料:
  • 我在做学校作业,要求如下:“设计一个具有名为writeArray的静态方法的类。该方法应包含两个参数:文件名和对int数组的引用。该文件应作为二进制文件打开,数组的内容应写入该文件,然后关闭该文件。在名为readArray的类中写入第二个方法。该方法我们需要两个参数:文件名和对int数组的引用。应该打开文件,从文件中读取数据并存储在数组中,然后关闭文件。在程序中演示这两种方法。" 以下是我到目前为

  • 问题内容: 是否可以在Python 2.6中将stdin读取为二进制数据?如果是这样,怎么办? 我在Python 3.1文档中 看到这很简单,但是在2.6中执行此操作的工具似乎并不存在。 如果3.1中描述的方法不可用,是否有办法关闭stdin并以二进制模式重新打开? 更新资料 为了清楚起见,我在MS-DOS外壳程序中使用“类型”将二进制文件的内容传递给我的python代码。据我了解,这应该等效于U

  • 问题内容: 当尝试从ImageMagick子进程中读取Node.js中的数据时,它损坏了。 一个简单的测试用例如下: 我希望这等同于可以正确写入二进制文件的命令行。 最初存在maxBuffer选项太小并导致文件被截断的问题。增加该值之后,文件现在看起来比预期的要大一些,并且仍然损坏。来自stdout的数据是通过HTTP发送所必需的。 从ImageMagick stdout读取此数据的正确方法是什么

  • 问题内容: 我在bin中有一些图像,我想检查标题以检查格式(jpg,png等) 我不想使用临时文件!我有使用TEMP FILES的解决方案。 问题答案: 这些位以: 其他我现在不知道的东西,但是大3(jpeg,gif,png)通常覆盖99%。因此,将第一个字节与那些字符串进行比较,您将得到答案。

  • 问题内容: 我正在尝试2天,以找到一种从数据库中检索一些图像的方法。它们被保存为二进制字符串(我在某个地方读过该术语,但坦率地说从未听说过)。 大多数图像都是格式化的,很容易获取并保存到文件中。但是我的问题是图像。由于某种原因,我当时无法显示。 现在,我正在使用一个简单的代码来获取图像并将其保存到文件中: 在和中都能正常工作,但是在尝试显示时格式不可读。 我已经发现但尚未解决的问题: http:/

  • 问题内容: 我正在尝试从URLConnection读取二进制文件。当我使用文本文件对其进行测试时,它似乎可以正常工作,但对于二进制文件则不能。发送文件时,我在服务器上使用以下mime类型: 但是到目前为止,似乎没有任何效果。这是我用来接收文件的代码: 问题答案: 我就是这样