8604076165829.jpg

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() 輸出完所有的資料後會自動將檔案關閉。

arrow
arrow
    創作者介紹
    創作者 MonkeyJ 的頭像
    MonkeyJ

    程式猴

    MonkeyJ 發表在 痞客邦 留言(0) 人氣()