2011-10-28 24 views
1

數據庫中的圖片是否有我的問題:記錄在與SQL Server和PHP

我用這種方法記錄在數據庫中的圖片:

UPDATE myTable 
SET pictureData = (SELECT * FROM OPENROWSET(BULK 'myFileAdress.jpeg', SINGLE_BLOB)AS x) 
WHERE … 

我看了這個數據是這樣的:

$myData = $myConnection->query('Select pictureData from myTable where …'); 
$row = $myData->fetch(PDO::FETCH_ASSOC); 
echo @pack('H*', $row['pictureData']) 

在另一隻手我嘗試直接讀取從PHP腳本這個圖片文件如下:

$data = fopen ($myPictureAdress, 'rb'); 
$size = filesize ($picture); 
echo fread ($data, $size); 

事實上,一些八位字節('0')被放在第一個方法(從數據庫中)並破壞我的圖片,如下所示。

有沒有人知道爲什麼這個八位組被放置在那裏?插入查詢是否正確完成?

非常感謝您的幫助!

系統信息:

  • 的SQL Server 2005
  • IIS

好:

000000D0 38 00 42 00 63 00 63 00 63 00 63 00 63 00 63 00 8 B c c c c c c <-- no error 
000000E0 63 00 63 00 63 00 63 00 63 00 63 00 63 00 63 00 c c c c c c c c 
000000F0 63 00 63 00 63 00 63 00 63 00 63 00 63 00 63 00 c c c c c c c c 
00000100 63 00 63 00 63 00 63 00 63 00 63 00 63 00 63 00 c c c c c c c c 

不好:

00000100 63 00 63 00 63 00 63 00 63 00 06 00 36 00 36 00 c c c c c 6 6 <-- error 
00000110 36 00 36 00 36 00 36 00 36 00 36 00 36 00 36 00 6 6 6 6 6 6 6 6 
00000120 36 00 36 00 36 00 36 00 36 00 36 00 36 00 36 00 6 6 6 6 6 6 6 6 
+0

我不熟悉如何將數據插入到sql中的方法。但也許你在這個入口找到一些提示和鏈接:http://stackoverflow.com/questions/6106470/php-convert-a-blob-into-an-image-file/6106541#6106541 – rokdd

回答

0

將二進制數據的十六進制值存儲在數據庫中。一旦我讀它,我讀了十六進制並將其轉換爲二進制。

public byte[] StringToByteArray(string hex) 
{ 
return Enumerable.Range(0, hex.Length) 
         .Where(x => x % 2 == 0) 
         .Select(x => Convert.ToByte(hex.Substring(x, 2),16)) 
         .ToArray(); 
    }