在網站開發中,經常需要給網站添加圖片。最常用的方法是將圖片上傳到服務器,然后在網站中使用引用的方式來顯示圖片。但對于一些需要動態生成圖片的場景,我們可以使用PHP Mysql附帶的BLOB(二進制大型對象)類型來將圖片數據存入數據庫,方便快捷。下面我們就來詳細介紹一下如何使用PHP Mysql插入圖片。
我們首先需要創建一個表格用來存放圖片信息,如下所示:
CREATE TABLE `image_table` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NOT NULL, `type` VARCHAR(10) NOT NULL, `size` INT(11) NOT NULL, `data` LONGBLOB NOT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8;通過以上代碼,我們定義了一個包含圖像名、類型、大小和實際二進制數據的表格。在這個表格中,我們可以插入多個圖片的信息。接下來,我們就可以使用PHP代碼來向這個表格中插入數據了。 在向數據庫中插入圖片之前,我們需要先將圖片的二進制數據讀取出來。我們可以使用PHP中的file_get_contents函數來將圖片讀取為二進制數據。假設我們已經將一張名為“test.jpg”的圖片上傳至網站服務器的uploads/目錄下,那么我們可以使用如下代碼讀取這張圖片。
$imgdata = file_get_contents("uploads/test.jpg");然后我們可以使用PHP Mysql提供的接口來將圖片數據存入數據庫中。我們可以先使用Mysqli類連接數據庫,并選擇要操作的數據表。
$mysqli = new mysqli("localhost", "root", "password", "db_name"); //選擇數據表 $table_name = "image_table";接下來,我們就可以使用Mysqli類提供的接口來向數據表中插入圖片數據了。和普通的插入操作不同的是,我們需要提供圖片數據的二進制流,而且需要使用mysqli_stmt類來表示該插入操作。示例代碼如下:
$stmt = $mysqli->prepare("INSERT INTO $table_name (name, type, size, data) VALUES (?, ?, ?, ?)"); //設定參數 $name = "test"; $type = "jpg"; $size = strlen($imgdata); $data = $imgdata; $stmt->bind_param("ssib", $name, $type, $size, $data); //執行插入操作 $stmt->execute();通過以上代碼,我們就可以將二進制數據類型的圖片存儲到數據庫中了。我們可以在表格中查看到插入的圖片信息,包括圖片名、類型、大小和二進制數據。接下來,我們可以使用動態的方式來顯示這張圖片。我們可以在PHP中查詢數據庫,獲取上面插入的圖片數據,并使用header函數來設置網絡響應,指示瀏覽器將輸出解釋為圖像。代碼示例如下:
$id = 1; //假定插入的圖片ID是1 $stmt = $mysqli->prepare("SELECT type, size, data FROM $table_name WHERE id = ?"); $stmt->bind_param("i", $id); $stmt->execute(); $stmt->bind_result($type, $size, $data); $stmt->fetch(); //讀取數據 //設置響應參數,指示瀏覽器輸出為jpg格式圖片 header("Content-type: $type"); header("Content-length: $size"); echo $data; //輸出圖片數據通過以上代碼,我們就可以在瀏覽器中動態顯示插入的圖片了。 在使用PHP Mysql插入圖片時,需要注意的是,BLOB類型的數據存儲需要占用大量存儲空間,并且也會增加數據庫讀取和寫入的負擔。因此,在實際應用中,我們需要謹慎使用BLOB類型來存儲圖片數據。在大部分場景下,使用文件上傳的方式來保存圖片,然后在網頁中引用圖片文件也是個很好的選擇。
下一篇css塊狀向右移動