創建數據庫
CREATE TABLE ccs_image (
id int(4) unsigned NOT NULL auto_increment,
description varchar(250) default NULL,
bin_data longblob,
filename varchar(50) default NULL,
filesize varchar(50) default NULL,
filetype varchar(50) default NULL,
PRIMARY KEY (id)
)php
接着是上傳文件的頁面,upload.php,code以下:
html
<HTML> <HEAD><TITLE>Store binary data into SQL Database</TITLE></HEAD> <BODY> <?php if (isset($_POST['submit'])) { $form_description = $_POST['form_description']; $form_data_name = $_FILES['form_data']['name']; $form_data_size = $_FILES['form_data']['size']; $form_data_type = $_FILES['form_data']['type']; $form_data = $_FILES['form_data']['tmp_name']; $connect = MYSQL_CONNECT( "localhost", "root", "") or die("Unable to connect to MySQL server"); mysql_select_db( "test") or die("Unable to select database"); $data = addslashes(fread(fopen($form_data, "r"), filesize($form_data))); //echo "mysqlPicture=".$data; $result=MYSQL_QUERY( "INSERT INTO ccs_image (description,bin_data,filename,filesize,filetype) VALUES ('$form_description','$data','$form_data_name','$form_data_size','$form_data_type')"); $id= mysql_insert_id(); print "<p>This file has the following Database ID: <a href='getdata.php?id=$id'><b>$id</b></a>"; MYSQL_CLOSE(); } else { ?> <center> <form method="post" action="http://localhost/temp/1018/upload.php" enctype="multipart/form-data"> File Description: <input type="text" name="form_description" size="40"> <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000000"> <br> File to upload/store in database: <input type="file" name="form_data" size="40"> <p><input type="submit" name="submit" value="submit"> </form> </center> <?php } ?> </BODY> </HTML>上文中的 $_FILES['form_data']['name']; 等是獲取剛上傳來的文件的信息,php manual中有提到
注: 要確保文件上傳表單的屬性是 enctype="multipart/form-data",不然文件上傳不了。 mysql
全局變量 $_FILES 自 PHP 4.1.0 起存在(在更早的版本中用 $HTTP_POST_FILES 替代)。此數組包含有全部上傳的文件信息。 sql
以上範例中 $_FILES 數組的內容以下所示。咱們假設文件上傳字段的名稱如上例所示,爲 userfile。名稱可隨意命名。 數據庫
客戶端機器文件的原名稱。 數組
文件的 MIME 類型,若是瀏覽器提供此信息的話。一個例子是「image/gif」。不過此 MIME 類型在 PHP 端並不檢查,所以不要想固然認爲有這個值。 瀏覽器
已上傳文件的大小,單位爲字節。 函數
文件被上傳後在服務端儲存的臨時文件名。 post
和該文件上傳相關的錯誤代碼。此項目是在 PHP 4.2.0 版本中增長的。fetch
$data = addslashes(fread(fopen($form_data, "r"), filesize($form_data)));
默認狀況下,PHP 指令 magic_quotes_gpc 爲 on,它主要是對全部的 GET、POST 和 COOKIE 數據自動運行 addslashes()。不要對已經被 magic_quotes_gpc 轉義過的字符串使用 addslashes(),由於這樣會致使雙層轉義。遇到這種狀況時可使用函數 get_magic_quotes_gpc() 進行檢測。
顯示圖片,getdata.php,code以下
<?php if(isset($_GET['id'])) { $id = $_GET['id']; $connect = MYSQL_CONNECT( "localhost", "root", "") or die("Unable to connect to MySQL server"); mysql_select_db( "test") or die("Unable to select database"); $query = "select bin_data,filetype from ccs_image 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; } ?>
<HTML> <BODY> <?php $connect = MYSQL_CONNECT( "localhost", "root", "") or die("Unable to connect to MySQL server"); mysql_select_db( "test") or die("Unable to select database"); $result=mysql_query("SELECT * FROM ccs_image") or die("Can't Perform Query"); While ($row=mysql_fetch_object($result)){ echo "<img src=\"show.php?id=".$row->Id."\">winson<br>"; } ?> </BODY> </HTML>最後提醒一點,header()函數使用前必定不能有任何輸出,就算"<?php"前有個空格都不行!