PHP读取SQL Server Image类型字段问题记录
写在前面
前几天朋友叫帮忙做一个小工具,读取ERP 的SQL Server数据库里面的款式表,用于网页展示,网站采用的是前后端分离架构。
写在中间
SQL Server数据库存储图片的字段是image类型,我直接用PHP读取出来的时候,会显示乱码。
数据库字段内容如下,由于数据太长,只做部分截图:
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 );
一下是输出的部分截图:
这样前端就可以直接使用了