我目前使用 SQL Server 2000 作為 ODBC 存取的資料來源,並在 Windows 2000 上執行的 Apache 2 伺服器上測試 PHP 腳本。
我嘗試使用 ODBC 從資料庫中取得影像,但當我使用 odbc_result() 函式取得結果時,輸出總是會自動清除。
使用以下程式碼,當我呼叫 odbc_result() 時,圖片會立即自動輸出到瀏覽器(可能是個錯誤,但回報錯誤並不容易)。
<?php
$connH=odbc_pconnect("ImageDB","sa","",SQL_CUR_USE_IF_NEEDED) or die(odbc_errormsg());
$result=odbc_exec($connH, "SELECT Emp_Image FROM tblEmployeePics WHERE Emp_Id=547");
if ($result) {
odbc_longreadlen($result, 131072);
odbc_binmode($result,ODBC_BINMODE_PASSTHRU);
$m_FValue=odbc_result($result, 1);
}
?>
...經過 48 小時的苦思,我終於找到了一個解決方法,是透過使用 bin2hex() 函式文件中的另一個函式...
<?php
function hex2bin($data){
$len = strlen($data);
return pack("H" . $len, $data);
}
$connH=odbc_pconnect("ImageDB","sa","",SQL_CUR_USE_IF_NEEDED) or die(odbc_errormsg());
$result=odbc_exec($connH, "SELECT Emp_Image FROM tblEmployeePics WHERE Emp_Id=547");
if ($result) {
odbc_longreadlen($result, 131072);
odbc_binmode($result,ODBC_BINMODE_CONVERT);
$m_FValue=odbc_result($result, 1);
$out=hex2bin($m_FValue);
}
?>
訣竅是將 odbc_binmode 改為 ODBC_BINMODE_CONVERT,將輸出轉換為十六進位制,然後使用一個方便的函式將其轉換回二進位制,以便於操作其大小、深度等...