在Web開發中,有時候需要在MySQL數據庫中存儲和管理圖片等二進制數據,那么該如何實現呢?下面將介紹一種方法:
CREATE TABLE `image` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `type` varchar(10) NOT NULL, `size` int(11) NOT NULL, `content` longblob NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
以上的SQL語句創建了一個名為"image"的表,其中包含id、name、type、size和content五個字段,分別用來存儲圖片的唯一標識、名稱、類型、大小和內容。
接下來就是將圖片保存到數據庫。PHP中可以使用file_get_contents()函數讀取圖片二進制數據,然后使用base64_encode()函數將其轉換成BASE64編碼,最后將編碼后的字符串存儲到數據庫中的content字段中:
$image = file_get_contents("test.jpg"); $content = base64_encode($image); $conn = mysqli_connect($host, $user, $password, $dbname); $sql = "INSERT INTO image(name,type,size,content) VALUES (?,?,?,?)"; $stmt = mysqli_prepare($conn, $sql); mysqli_stmt_bind_param($stmt, "ssis", $name, $type, $size, $content); mysqli_stmt_execute($stmt); mysqli_stmt_close($stmt); mysqli_close($conn);
到此為止,我們已經將圖片存儲到了MySQL數據庫中。如需讀取圖片,只需將content字段的內容讀取出來,然后使用base64_decode()函數將其解碼即可:
$conn = mysqli_connect($host, $user, $password, $dbname); $sql = "SELECT content FROM image WHERE id=?"; $stmt = mysqli_prepare($conn, $sql); mysqli_stmt_bind_param($stmt, "i", $id); mysqli_stmt_execute($stmt); mysqli_stmt_bind_result($stmt, $content); if (mysqli_stmt_fetch($stmt)) { header("Content-type: image/jpeg"); echo base64_decode($content); } mysqli_stmt_close($stmt); mysqli_close($conn);
總之,將圖片存到數據庫中有其優點和缺點,需要根據具體情況進行選擇。