通常來說都是把圖片保存到服務器下,而後根據路徑讀出的,可是有時候出於安全及版權什麼的考慮,會把圖片保存到mysql的數據庫中,而後再讀出來,這樣的圖片點擊右鍵屬性,是看不到圖片地址的。下面逍遙一輩子就介紹下如何用php把圖片存儲到mysql中及如何讀出。
MySQL數據庫使用專門的字段來保存大容量的數據,數據類型爲BLOB。
MySQL數據庫爲BLOB作出的定義以下:BLOB數據類型是一種大型的二進制對象,能夠保存可變數量的數據。BLOB具備四種類型,分別是TINYBLOB,BLOB, MEDIUMBLOB 與LONGBLOB,區別在於各自所可以保存的最大數據長度區別。
在介紹了所須要使用的數據類型以後,咱們能夠使用如下語句建立保存圖象的數據表。
CREATE TABLE Images ( PicNum int NOT NULL AUTO_INCREMENT PRIMARY KEY, Image BLOB );
編寫上傳腳本
關於如何編寫文件的上傳,咱們在這裏就再也不介紹了,感興趣的讀者能夠參見「網頁陶吧」內的相關文章。如今,咱們主要來看一下如何接收上傳文件並將其存入到MySQL數據庫中。具體的腳本代碼以下,其中咱們假定文件上傳域的名稱爲Picture。
php
這樣,咱們就能夠成功的把圖片保存到數據庫中。若是在將圖片插入MySQL的過程當中出現問題,能夠檢測一下MySQL數據庫所容許的最大數據包的大小。若是設置值太小的話,咱們會在數據庫的錯誤日誌中找到相應的記錄。
下面,咱們簡單詳解一下上述腳本程序。首先,咱們經過「If($Picture != "none")」檢測是否有文件被上傳。而後,使用addslashes()函數避免出現數據格式錯誤。最後,鏈接MySQL,選擇數據庫並插入圖片。
顯示圖片
在知道了如何將圖? 入數據庫以後,咱們就須要考慮如何才能從數據庫中取出圖片並在HTML頁面中顯示出來。這個過程要稍微複雜一些,下面咱們就來介紹一下編寫過程。
由於PHP顯示圖片須要發送相應的標頭,因此咱們就會面臨這樣一個問題,那就是一次只能顯示一副圖片,由於咱們不能在發出標頭以後再發送其它的標頭。
爲了有效的解決這一問題,咱們編寫了兩個文件。其中,第一個文件做爲HTML頁面的模板,定位圖片的顯示位置。第二個文件則被用來從數據庫中實際輸出文件流,做爲<IMG>標籤的SRC屬性。
第一個文件的簡單形式能夠以下:
mysql
當HTML頁面被瀏覽時,每顯示一副圖片就會調用一次Second.php3文件。當第二個文件被調用時會傳入相應的Picture ID,咱們能夠藉此從數據庫中取回對應的圖片並顯示。
Second.php文件以下:
sql