PHP读取SQL Server Image类型字段问题记录

PHP读取SQL Server Image类型字段问题记录

写在前面

​ 前几天朋友叫帮忙做一个小工具,读取ERP 的SQL Server数据库里面的款式表,用于网页展示,网站采用的是前后端分离架构。

写在中间

​ SQL Server数据库存储图片的字段是image类型,我直接用PHP读取出来的时候,会显示乱码。

数据库字段内容如下,由于数据太长,只做部分截图:

553c5cbc1b65ead5f26046b3fe67fc5bf73.jpg

PHP代码如下:

<?php
  $serverName = "127.0.0.1";
  $connectionInfo = array("UID"=>'sa', "PWD"=>'123456', "Database"=>"test");
  $conn = sqlsrv_connect($serverName, $connectionInfo);
  $sql = 'select * from test_v_style where SID=1457';
  $result = sqlsrv_query($conn, $sql);
  $style_img = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)['style_img'];

  var_dump($style_img);

  sqlsrv_close ( $conn );

在终端执行的结果是:

![image-20190718163556304](/Users/anlewo/Library/Application Support/typora-user-images/image-20190718163556304.png)

各种乱码,但是如果增加 header 用浏览器打开,却是没问题的,图片可以正常显示出来。

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

但是,由于是API输出,这种方式肯定是不妥,所以就开始想其他的解决办法,直接看数据,是十六进制,所以就想到了base64 ,使用 base64 对 数据 进行编码,数据可以通过非纯8-bit 的传输层传输,但是数据要比原始数据多占用33%左右的空间。PHP代码如下:

<?php
  $serverName = "127.0.0.1";
  $connectionInfo = array("UID"=>'sa', "PWD"=>'123456', "Database"=>"test");
  $conn = sqlsrv_connect($serverName, $connectionInfo);
  $sql = 'select * from test_v_style where SID=1457';
  $result = sqlsrv_query($conn, $sql);
  $style_img = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)['style_img'];

  var_dump('data:image/png;base64' . base64_encode($style_img));

  sqlsrv_close ( $conn );

一下是输出的部分截图:

047e7d9aedef8f2ca702844ed9dddd0c82d.jpg

这样前端就可以直接使用了

转载于:https://my.oschina.net/esionwong/blog/3076084

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值