2012-03-13 61 views
1

因此,我有一個網絡攝像頭小部件可以從客人處獲取快照。我的客人表有一個圖片字段,我想存儲這張照片。我試圖存儲原始二進制數據,base64編碼的數據,它沒有奏效。我不知道數據庫是否正在接收正確的數據,或者如果我沒有很好地處理返回的數據。我在我的應用程序中使用PDO,並且我在網上閱讀過它可能存在數據大於64 kb的問題,任何人都知道它是否屬實?PHP和SQL Server - 從圖像字段中檢索圖像

這是我從網絡攝像頭獲得的圖像數據:

$imagem = file_get_contents('php://input'); 

就像我上面說我試圖存儲圖像的純數據$imagem,然後是這樣的:

$data = @unpack("H*hex", $imagem); 
$imagem_bd='0x'.$data['hex']; 

而對於這兩個我試過編碼base64也沒有工作。

僅供參考:我正在使用的這個應用程序是另一個具有此功能的類似應用程序的翻拍,但在這個舊應用程序中,我使用了TSQL,並且它工作正常。

謝謝你。

編輯

現在我也做了插入很好,但我不能檢索渲染在瀏覽器中的圖像。

+0

任何人????????? – DontVoteMeDown 2012-03-13 19:58:37

回答

3

您可以將圖像編碼爲blob而不是base64。但我建議你將圖像存儲爲文件並將鏈接存儲在數據庫中。由於將圖像存儲在數據庫中可能消耗大量空間,並且返回它可能會吃掉服務器,並且與文件系統相比,加載可能需要更多時間。

+0

是的,我知道,但它必須優選這種方式。你如何將blob編碼爲sugest,我該怎麼做?謝謝。 – DontVoteMeDown 2012-03-14 13:47:38

+0

www.techcubetalk.com/2009/01/tutorial-on-how-to-store-images-in-mysql-blob-field/ 檢查該鏈接。 – 2012-03-14 17:56:41

1

如果使用PreparedStatement,所有你需要做的是使用bindValue,與二值圖像:

$sql = "INSERT INTO your_table (image) VALUES (?)"; 
$stmt->bindValue(1, $imagem); 
$stmt->execute(); 

無論如何,在這裏說,它不是存儲在數據庫中的圖像是一個好主意。

關於64KB限制,它取決於表中的列的數據類型(在MySQL中,BLOB類型的限制爲64KB,但還有其他類型的數據,如MEDIUMBLOB和LONGBLOB)。

+0

到目前爲止,沒關係,請看我的編輯。 – DontVoteMeDown 2012-03-14 13:51:15