亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用PHP從MySQL數據庫存儲和檢索圖像?

如何使用PHP從MySQL數據庫存儲和檢索圖像?

海綿寶寶撒 2019-06-26 13:39:31
如何使用PHP從MySQL數據庫存儲和檢索圖像?如何在MySQL中插入圖像,然后使用PHP檢索圖像?我在這兩個領域的經驗有限,我可以使用一些代碼來讓我開始弄清楚這一點。
查看完整描述

3 回答

?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

首先,創建一個MySQL表來存儲圖像,例如:

create table testblob (
    image_id        tinyint(3)  not null default '0',
    image_type      varchar(25) not null default '',
    image           blob        not null,
    image_size      varchar(25) not null default '',
    image_ctgy      varchar(25) not null default '',
    image_name      varchar(50) not null default '');

然后,您可以將圖像寫入數據庫,如下所示:

/***
 * All of the below MySQL_ commands can be easily
 * translated to MySQLi_ with the additions as commented
 ***/ $imgData = file_get_contents($filename);$size = getimagesize($filename);mysql_connect("localhost", "$username", "$password");mysql_select_db ("$dbname");// mysqli // $link = mysqli_connect("localhost", $username, $password,$dbname); $sql = sprintf("INSERT INTO testblob
    (image_type, image, image_size, image_name)
    VALUES
    ('%s', '%s', '%d', '%s')",
    /***
     * For all mysqli_ functions below, the syntax is:
     * mysqli_whartever($link, $functionContents); 
     ***/
    mysql_real_escape_string($size['mime']),
    mysql_real_escape_string($imgData),
    $size[3],
    mysql_real_escape_string($_FILES['userfile']['name'])
    );mysql_query($sql);

您可以在以下網頁中顯示數據庫中的圖像:

$link = mysql_connect("localhost", "username", "password");mysql_select_db("testblob");$sql = "SELECT image FROM testblob WHERE image_id=0";$result = mysql_query("$sql");header("Content-type: image/jpeg");echo mysql_result($result, 0);mysql_close($link);


查看完整回答
反對 回復 2019-06-26
?
LEATH

TA貢獻1936條經驗 獲得超7個贊

不要將圖像存儲在數據庫中,而是將它們存儲在磁盤中的文件夾中,并將其存儲在數據庫中。


查看完整回答
反對 回復 2019-06-26
?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

請注意,從DB提供的映像通常是非常多的。比從磁盤為他們服務要慢。

您將啟動一個PHP進程,打開一個DB連接,讓DB像文件系統一樣從同一個磁盤和RAM讀取圖像數據,通過幾個套接字和緩沖區傳輸它,然后通過PHP進行推送,這在默認情況下使它不可緩存,并增加了塊HTTP編碼的開銷。

OTOH現代Web服務器只需很少經過優化的內核調用(內存映射文件和傳遞給TCP堆棧的內存區域)就可以提供映像,這樣它們甚至不會復制內存,而且幾乎沒有開銷。

這與在一臺機器上并行處理20或2000張圖像是有區別的。

所以別這么做除非您絕對需要事務完整性(實際上,這甚至可以通過DB中的圖像元數據和文件系統清理例程來完成),并且知道如何改進PHP對HTTP的處理,使之適合于圖像。


查看完整回答
反對 回復 2019-06-26
  • 3 回答
  • 0 關注
  • 536 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號