2013-10-14 124 views
0

我嘗試顯示存儲在數據庫中的圖像。我用從數據庫讀取圖像或向數據庫寫入圖像

$image = file_get_contents($testPfad); 
$dateigroesse = filesize($testPfad); 

$arrData = unpack("H*hex", $image); 
$data_string = "0x".$arrData['hex']; 

$sql = "INSERT INTO EHS.dbo.T_Signaturen (UnterschriftsDateiName,UnterschriftsBild,Dateigroesse,terminID) VALUES (
     '".$unterschriftsFileName."', 
     CONVERT(varbinary(max),'$data_string'), 
     '".$dateigroesse."', 
     '384_234')"; 
     echo '<hr>'.$sql; 
     insert($sql); 

用這段代碼我輸出圖像。

header("Content-type: image/jpeg"); 
$query = "SELECT Dateigroesse, CONVERT(varchar(max), UnterschriftsBild) as content_data FROM EHS.dbo.T_Signaturen WHERE ID = '10'"; 
$result = query($query); 
$content = $result[1]["content_data"];  
$filesize = $result[1]["Dateigroesse"]; 

$content = substr ($content, 2);    // entfernt 0x 
$content = pack("H*", $content); 
print $content; 

一切工作正常,但只顯示圖像的一部分。我將圖像大小從20kb縮小爲2kb,並且顯示了更多圖像,所以我認爲無處不在二進制數據被削減。數據庫列是VARBINARY(最大值)

請讓我們不討論羯羊是合理的在數據庫存儲BLOB :) :)

+0

爲什麼要將圖像保存到數據庫中?沒有保存到文件夾並更好地保存路徑到數據庫? –

+0

由於安全原因和php設置,這是不可能的 – alex

回答

1

解決的辦法是增加在php.ini ODBC的最大接受字符串的長度。它被設置爲4069字符

0
  • 沒有嘗試定義列作爲BLOB(最多2個GB)?
  • 你確定,即完整的圖像存儲(也許這功能失常)
+0

- SQL不支持BLOB。 nvarbinary是一個可變寬度的二進制字符串。最大2GB - 我可以複製和粘貼出SQL Server management Studio的數據字符串比字符串php回聲長得多 – alex