PHP教學 - 使用BLOB存取圖片資料範例
BLOB是一種MySQL資料類型,稱為二進制大物件。正如它的名字它是用來存儲類似MYSQL二進制和VARBINARY類型的、大量的字串資料。
MySQL BLOB分類
在本節教學中,我們學習使用PHP插入和讀取MySQL BLOB字段。
首先,我們需要新增一個MySQL表與一個BLOB字段。
CREATE TABLE IF NOT EXISTS `output_images` (
`imageId` tinyint(3) NOT NULL AUTO_INCREMENT,
`imageType` varchar(25) NOT NULL DEFAULT '',
`imageData` mediumblob NOT NULL,
PRIMARY KEY (`imageId`)
)
插入資料
將圖片訊息插入MySQL BLOB字段中。
1、上傳圖像文件.
2、獲取圖像屬性(圖像資料、圖像類型等等。)
3、圖像文件插入BLOB。
PHP實現scripts:
imageUpload.php
<?php
if(count($_FILES) > 0) {
if(is_uploaded_file($_FILES['userImage']['tmp_name'])) {
mysql_connect("localhost", "root", "");
mysql_select_db ("phppot_examples");
$imgData =addslashes(file_get_contents($_FILES['userImage']['tmp_name']));
$imageProperties = getimageSize($_FILES['userImage']['tmp_name']);
$sql = "INSERT INTO output_images(imageType ,imageData)
VALUES('{$imageProperties['mime']}', '{$imgData}')";
$current_id = mysql_query($sql) or die("<b>Error:</b> Problem on Image Insert<br/>" .
mysql_error());
if(isset($current_id)) {
header("Location: listImages.php");
}}}
?>
<HTML>
<HEAD>
<TITLE>Upload Image to MySQL BLOB</TITLE>
<link href="imageStyles.css" rel="stylesheet" type="text/css" />
</HEAD>
<BODY>
<form name="frmImage" enctype="multipart/form-data" action="" method="post"
class="frmImageUpload">
<label>Upload Image File:</label><br/>
<input name="userImage" type="file" class="inputFile" />
<input type="submit" value="Submit" class="btnSubmit" />
</form>
</div>
</BODY>
</HTML>
執行這個scripts後上傳表單將顯示如下:
[PHP教學:使用BLOB存取圖片訊息範例]
提交表單,PHP獲取內容圖像的文件並將其作為二進制資料存儲到MySQL BLOB列。
顯示圖片
在瀏覽器上顯示BLOB圖像,我們必須:
1、從MySQL BLOB獲得圖像資料和類型
2、將類型設置為圖像(image/jpg, image/gif, …)使用PHP header()函數。
3、輸出圖像內容。
imageView.php
<?php
$conn = mysql_connect("localhost", "root", "");
mysql_select_db("phppot_examples") or die(mysql_error());
if(isset($_GET['image_id'])) {
$sql = "SELECT imageType,imageData FROM output_images WHERE imageId=" . $_GET['image_id'];
$result = mysql_query("$sql") or die("<b>Error:</b> Problem on Retrieving Image BLOB<br/>"
. mysql_error());
$row = mysql_fetch_array($result);
header("Content-type: " . $row["imageType"]);
echo $row["imageData"];
}
mysql_close($conn);
?>
上面的PHP程式碼將顯示MySQL BLOB存儲的圖片。從HTML圖像標籤我們可以參考這個PHP文件與相應image_id作為參數。例如:
<img src="imageView.php?image_id=<?php echo $row["imageId"]; ?>" />
完成程式碼如下:
listImages.php
<?php
$conn = mysql_connect("localhost", "root", "");
mysql_select_db("phppot_examples");
$sql = "SELECT imageId FROM output_images ORDER BY imageId DESC";
$result = mysql_query($sql);
?>
<HTML>
<HEAD>
<TITLE>List BLOB Images</TITLE>
<link href="imageStyles.css" rel="stylesheet" type="text/css" />
</HEAD>
<BODY>
<?php
while($row = mysql_fetch_array($result)) {
?>
<img src="imageView.php?image_id=<?php echo $row["imageId"]; ?>" /><br/>
<?php
}
mysql_close($conn);
?>
</BODY>
</HTML>
MySQL BLOB分類
MySQL BLOB類型 | 最大存儲長度(字元) |
TINYBLOB | (1)(2 ^ 8) |
blob | ((2 ^ 16)1) |
MEDIUMBLOB | ((2 ^ 24)1) |
LONGBLOB | ((2 ^ 32)1) |
首先,我們需要新增一個MySQL表與一個BLOB字段。
CREATE TABLE IF NOT EXISTS `output_images` (
`imageId` tinyint(3) NOT NULL AUTO_INCREMENT,
`imageType` varchar(25) NOT NULL DEFAULT '',
`imageData` mediumblob NOT NULL,
PRIMARY KEY (`imageId`)
)
插入資料
將圖片訊息插入MySQL BLOB字段中。
1、上傳圖像文件.
2、獲取圖像屬性(圖像資料、圖像類型等等。)
3、圖像文件插入BLOB。
PHP實現scripts:
imageUpload.php
<?php
if(count($_FILES) > 0) {
if(is_uploaded_file($_FILES['userImage']['tmp_name'])) {
mysql_connect("localhost", "root", "");
mysql_select_db ("phppot_examples");
$imgData =addslashes(file_get_contents($_FILES['userImage']['tmp_name']));
$imageProperties = getimageSize($_FILES['userImage']['tmp_name']);
$sql = "INSERT INTO output_images(imageType ,imageData)
VALUES('{$imageProperties['mime']}', '{$imgData}')";
$current_id = mysql_query($sql) or die("<b>Error:</b> Problem on Image Insert<br/>" .
mysql_error());
if(isset($current_id)) {
header("Location: listImages.php");
}}}
?>
<HTML>
<HEAD>
<TITLE>Upload Image to MySQL BLOB</TITLE>
<link href="imageStyles.css" rel="stylesheet" type="text/css" />
</HEAD>
<BODY>
<form name="frmImage" enctype="multipart/form-data" action="" method="post"
class="frmImageUpload">
<label>Upload Image File:</label><br/>
<input name="userImage" type="file" class="inputFile" />
<input type="submit" value="Submit" class="btnSubmit" />
</form>
</div>
</BODY>
</HTML>
執行這個scripts後上傳表單將顯示如下:
[PHP教學:使用BLOB存取圖片訊息範例]
提交表單,PHP獲取內容圖像的文件並將其作為二進制資料存儲到MySQL BLOB列。
顯示圖片
在瀏覽器上顯示BLOB圖像,我們必須:
1、從MySQL BLOB獲得圖像資料和類型
2、將類型設置為圖像(image/jpg, image/gif, …)使用PHP header()函數。
3、輸出圖像內容。
imageView.php
<?php
$conn = mysql_connect("localhost", "root", "");
mysql_select_db("phppot_examples") or die(mysql_error());
if(isset($_GET['image_id'])) {
$sql = "SELECT imageType,imageData FROM output_images WHERE imageId=" . $_GET['image_id'];
$result = mysql_query("$sql") or die("<b>Error:</b> Problem on Retrieving Image BLOB<br/>"
. mysql_error());
$row = mysql_fetch_array($result);
header("Content-type: " . $row["imageType"]);
echo $row["imageData"];
}
mysql_close($conn);
?>
上面的PHP程式碼將顯示MySQL BLOB存儲的圖片。從HTML圖像標籤我們可以參考這個PHP文件與相應image_id作為參數。例如:
<img src="imageView.php?image_id=<?php echo $row["imageId"]; ?>" />
完成程式碼如下:
listImages.php
<?php
$conn = mysql_connect("localhost", "root", "");
mysql_select_db("phppot_examples");
$sql = "SELECT imageId FROM output_images ORDER BY imageId DESC";
$result = mysql_query($sql);
?>
<HTML>
<HEAD>
<TITLE>List BLOB Images</TITLE>
<link href="imageStyles.css" rel="stylesheet" type="text/css" />
</HEAD>
<BODY>
<?php
while($row = mysql_fetch_array($result)) {
?>
<img src="imageView.php?image_id=<?php echo $row["imageId"]; ?>" /><br/>
<?php
}
mysql_close($conn);
?>
</BODY>
</HTML>
留言
張貼留言