我似乎無法找出將二進制數據從SQL Server讀取到PHP的方法。我正在開發一個項目,我需要能夠將圖像直接存儲在SQL表中,而不是在文件系統上。幫助將二進制圖像數據從SQL Server讀取到PHP中
目前,我一直在使用類似的查詢這一個:
INSERT INTO mytable的(文件) SELECT * FROM OPENROWSET(BULK N'C:\ image.jpg的」,SINGLE_BLOB)作爲BLAH
這工作正常,實際上插入圖像到表中,但我還沒有想出一種方法來檢索它,並讓我的圖像回來。
我正在用PHP做這件事,最終將不得不使用存儲過程,但任何人都可以啓發我獲取二進制數據(varbinary(MAX)
)並生成圖片。
我期望它很容易使用SELECT
語句,並添加一個內容類型到標題,表明它是一個圖像,但它根本無法正常工作。相反,該頁面將顯示文件的名稱,這是我在過去遇到的,並將其理解爲與圖像數據有關的錯誤。
編輯:我想我想通了。 SQL Server在從存儲過程讀取時僅發送最多8000字節時出現了一些問題,因此導致我測試的圖像中斷。
$q = "Get_Picture_Test_SP @pk_rms_id=1443546"; $res = mssql_query($q); $row = mssql_fetch_assoc($res); $image = $row['picture']; function hex2bin($h) { if (!is_string($h)) return null; $r=''; for ($a=0; $a<strlen($h); $a+=2) { $r.=chr(hexdec($h{$a}.$h{($a+1)})); } return $r; } $image = hex2bin($image); header("Content-type: image/gif"); print $image; exit; ?>
這是我如何顯示圖像。謝謝你提到這個十六進制提示,這讓我能夠弄清楚什麼是錯誤的。
您是否嘗試過使用chrome查看無效圖像的來源?可能存在PHP錯誤,導致圖像無效,或者可能解釋爲什麼甚至沒有圖像數據被丟棄。我記得曾經有一種方法可以在Firefox中做到這一點,但現在唯一一款爲我工作的瀏覽器是Chrome。 – Dereleased 2010-04-13 15:21:02
我曾嘗試使用SQL Server Management Studio並將二進制數據直接保存到我的文件系統,甚至不會顯示圖像。當我查看錶格時,數據以「0xFFD8FFE0 ...」格式存儲,而不是一堆垃圾字符。 – 2010-04-13 15:25:57
我可以訪問兩臺服務器。其中之一我有非常低的權限設置,不允許我使用批量插入,並且它使我很難測試出我遇到的圖像問題。另一個是我最近特意試圖找出顯示圖像的方法,並且我目前安裝了SQL服務器,並且Apache使用PHP工作。我還沒有能夠配置我的php.ini文件來與SQL Server一起工作,但是在這個測試服務器上我得到了。只要我得到SQL服務器與PHP工作,我可以做更多的測試。 – 2010-04-13 15:28:50