1. 程式人生 > >PHP讀取SQL Server Image型別欄位問題記錄

PHP讀取SQL Server Image型別欄位問題記錄

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 );

一下是輸出的部分截圖:

這樣前端就