若需將圖片、HTML 等二進位檔案直接存入 MySQL,可使用 LONGBLOB 欄位搭配 PHP 表單上傳與讀取程式實現。
CREATE DATABASE binary_data;
USE binary_data;
CREATE TABLE binary_data (
id INT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY,
description CHAR(50),
bin_data LONGBLOB,
filename CHAR(50),
filesize CHAR(50),
filetype CHAR(50)
);
store.php - HTML 表單上傳,讀取檔案內容寫入資料庫:
<?php
if ($submit) {
mysql_connect("localhost", "root", "passWord");
mysql_select_db("binary_data");
$data = addslashes(fread(fopen($form_data, "r"), filesize($form_data)));
$result = mysql_query("INSERT INTO binary_data (description, bin_data, filename, filesize, filetype)
VALUES ('$form_description', '$data', '$form_data_name', '$form_data_size', '$form_data_type')");
$id = mysql_insert_id();
echo "This file has the following Database ID: $id";
mysql_close();
} else {
?>
File to upload/store in database: <form method="post" enctype="multipart/form-data">
<input type="file" name="form_data">
<input type="text" name="form_description">
<input type="submit" name="submit" value="store">
</form>
<?php } ?>
上傳成功會顯示資料庫 ID,記下供讀取使用。
getdata.php - 依 ID 讀取並輸出檔案:
<?php
if ($id) {
mysql_connect("localhost", "root", "passWord");
mysql_select_db("binary_data");
$query = "SELECT bin_data, filetype FROM binary_data WHERE id=$id";
$result = mysql_query($query);
$data = mysql_result($result, 0, "bin_data");
$type = mysql_result($result, 0, "filetype");
header("Content-type: $type");
echo $data;
}
?>
呼叫方式:getdata.php?id=2。若為圖片,可直接用 <img src="getdata.php?id=3"> 引用。
MAX_FILE_SIZE 為 24000000php.ini:upload_max_filesize、post_max_size 設 24Mmax_allowed_packet=24M