php怎样读取SQL Server的image类型的数据?

发布于 2022-09-04 02:34:08 字数 1258 浏览 13 评论 0

在sql server中存的image类型的数据,应该是16进制的,但用odbc方式读取出来后却是乱码,为什么会这样?

-8 1 3 1 -7 0 -1 0 0 0 0 536870911 -9 2 0 0 2 0 1 RVStyle1 …    StyleNameckáeFontNameã[SOSize Unicode        StyleNamehòòFontName Ê•∑‰Ωì_GB2312SizeStylefsBoldUnicode        StyleNameP[hòòFontName Ê•∑‰Ωì_GB2312SizeStylefsBoldUnicode     StyleNameKm’ã1FontNameã[SOSizeStylefsBoldColorclMaroonUnicode        StyleNamesQ.ïÕãF......

补充:
用php_pdo_sqlsrv扩展读出来是这样的:
$str="FFD8FFE14D1C4578696600004D4D002A00000008000A0132000200000014000000868825000400000001000002D....."

这种格式与直接在数据库中看到的是基本一样的,只是看面没有0x字样。
致以为什么读出的结果编码会不一致,我不太清楚。

但后面一种情况是可以处理的:
可以使用hex2bin()函数转成二进制的数据再保存为对应格式就行了。
如果这个函数不能用,可以用这个来代替:

  function hextobin($hexstr) 
{ 
    $n = strlen($hexstr); 
    $sbin="";   
    $i=0; 
    while($i<$n) 
    {       
        $a =substr($hexstr,$i,2);           
        $c = pack("H*",$a); 
        if ($i==0){$sbin=$c;} 
        else {$sbin.=$c;} 
        $i+=2; 
    } 
    return $sbin; 
} 

来自:http://stackoverflow.com/ques...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦初启 2022-09-11 02:34:08

image类型的字段内容是二进制,你可以以图形的方式查看

$result = mssql_query("select imgdata from table1 where imagename = 'img2.jpg'");
$row = mssql_fetch_array($result);
header("Content-type: image/jpeg;");

$data = $row['imgdata'];

echo $data;

不过我看你贴出来的内容,不像是图片

例子,将一个word文档保存到数据库。
内容好用十六进制软件查看文件看到额一样

CREATE TABLE myTable(FileName nvarchar(60), 
  FileType nvarchar(60), Document image);
GO

INSERT INTO myTable(FileName, FileType, Document) 
   SELECT 'Doc1.doc' AS FileName, 
      '.doc' AS FileType, 
      * FROM OPENROWSET(BULK N'E:\Doc1.doc', SINGLE_BLOB) AS Document;
GO

图片描述

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文