日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

通过PHP保存图片到mysql,如何使用MySQL保存一个图片并且用PHP得到它

發(fā)布時間:2024/1/8 数据库 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通过PHP保存图片到mysql,如何使用MySQL保存一个图片并且用PHP得到它 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

點上面“東哥IT筆記”,關(guān)注并星標

每天一篇業(yè)界最新技術(shù)分享

首先,我要說的是把一個圖片保存在MySQL中,再讀出來是一個很不推薦的做法。我們只是看看假如真的要這樣做,該如何做,最后我會和大家聊聊一般我們?nèi)绾翁幚磉@種使用情況,以及不推薦這樣做的原因。

首先圖片是一個BLOB(Binary Large Object)是可以用來存儲二進制的數(shù)據(jù)。這就是用來保存圖片,文件等等的數(shù)據(jù)。因為這種object通常都很大,所以我們需要定義一個很大的域來保存信息。如何通過PHP來插入呢,其實很簡單:

1)讀取圖片成二進制

2)準備插入到數(shù)據(jù)庫

3)使用SQL語句插入相關(guān)數(shù)據(jù)到數(shù)據(jù)庫

下面我們來看看簡單的PHP代碼:// Image submitted by form. Open it for reading (mode "r")$fp = fopen($_FILES['file_name']['tmp_name'], "r");// If successful, read from the file pointer using the size of thefile (in bytes) as the length.if ($fp) {$content = fread($fp,$_FILES['file_name']['size']);fclose($fp);// Add slashes to thecontent so that it will escape special characters.// As pointed out,mysql_real_escape_string can be used here as well. Yourchoice.$content =addslashes($content);// Insert into the table"table" for column "image" with our binary string of data("content")mysql_query("Insertinto table (image) Values('$content')");}

這里我們使用了fread()來把圖片讀取成比特,有了相關(guān)比特數(shù)據(jù)之后,就是簡單地把它插入到BLOB的列就可以了。我們例子中image列是一個BLOB的數(shù)據(jù)類型。需要注意的是你選擇的BLOB的列大小需要能夠保存相應圖片的大小,因為MySQL還是有不同大小的BLOB數(shù)據(jù)類型的。

下面我們來看一下如何獲取圖片數(shù)據(jù),同樣需要三個步驟:

1)設置content的type到圖片的類型

2)找到圖片,并且把它從數(shù)據(jù)庫中拿出來

3)顯示圖片

相關(guān)的代碼如下:// Read the row we want to pull out of the database.$result = mysql_query("select image from table where id =1");// If successful, fetch the row as an array and store the data fromthe "image" column into a variable.if ($result) {if ($row =mysql_fetch_array($result)) {$img =$row["image"];}}// Set the content type of this page to image/jpeg since the imagewe are pulling out is a jpgimage.header("Content-type: image/jpeg");// Echo out the image.echo "$img";

我們把數(shù)據(jù)從image列中拿出來,并且保存在一個變量中,然后我們設置相關(guān)content-type為image/jpeg就可以了,然后就可以顯示相關(guān)的內(nèi)容了。

需要注意的是不要在header()調(diào)用之前打印任何部分,否則在調(diào)用header的時候會報錯"Headersalready sent"。

其實說白了,這個和別的BLOB數(shù)據(jù)的插入讀取是一樣的,并沒有任何差別。

下面我們來談談為什么不要把圖片保存到數(shù)據(jù)庫中呢?因為數(shù)據(jù)庫一般為了查詢的方便會進行分頁,而一些大的數(shù)據(jù)則會導致查詢變得很慢,所以我們還是不要這樣做為好。

那么推薦的做法是什么呢?我們一般會存儲相關(guān)文件的路徑就可以了。當想要找相關(guān)文件的時候,只要找到相關(guān)的路徑就可以了,然后再根據(jù)相關(guān)的路徑去磁盤找到需要顯示的文件就可以了。這樣做有兩個好處:1)這樣數(shù)據(jù)庫的數(shù)據(jù)就很小了。2)有了文件的名字,我們就可以用文件名來查找相關(guān)的文件了。

好了,這就是本文要講的內(nèi)容了。

總結(jié)

以上是生活随笔為你收集整理的通过PHP保存图片到mysql,如何使用MySQL保存一个图片并且用PHP得到它的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。