PHP讀取SQL Server Image型別欄位問題記錄
阿新 • • 發佈:2019-08-21
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
<?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 );
一下是輸出的部分截圖:
這樣前端就