MS SQL BLOB圖片無法顯示的問題
解法是 以資料流的形式擷取,再使用 PHP fpassthru() 函式來顯示:
$stmt = sqlsrv_query( $this->mssql, $sql);
if (sqlsrv_fetch($stmt)) {
$data = sqlsrv_get_field($stmt, 0,
SQLSRV_PHPTYPE_STREAM(SQLSRV_ENC_BINARY));
Header("Content-type:image/jpeg");
echo fpassthru($data);
} else {
return null;
}
sqlsrv_get_field:
語法:sqlsrv_get_field( resource $stmt, int $fieldIndex [, int $getAsType])
$stmt:對應至執行之陳述式的陳述式資源。
$fieldIndex:要擷取之欄位的索引。 索引從零開始。
$getAsType [選擇性]:一個 SQLSRV 常數 (SQLSRV_PHPTYPE_*),可決定傳回資料的 PHP 資料類型。
若未指定傳回類型,將會傳回預設 PHP 類型。
使用常數 SQLSRV_PHPTYPE_STREAM 可指定傳回型別。
SQLSRV_ENC_BINARY 資料會以原始位元組資料流形式從伺服器傳回,而不需執行編碼或轉譯。
fpassthru() 函數
int fpassthru(int fp);
將 fp 指標所指之後所有的資料輸出到標準輸出 (standard output)。失敗的話傳回 false。
fp 是已開啟的檔案指標,當 fpassthru() 輸出完所有的資料後會自動將檔案關閉。
留言列表