1. 程式人生 > >運用PDO存儲將圖片、音頻文件存入數據庫

運用PDO存儲將圖片、音頻文件存入數據庫

Enctype input 接下來 files 字符 put close emp key

在數據庫中創建表格的時候,有一個字段為image,用來保存圖片,那麽其類型就是blob,關於blob,百度百科是這樣描述的

BLOB (binary large object),二進制大對象,是一個可以存儲二進制文件的容器。 在計算機中,BLOB常常是數據庫中用來存儲二進制文件的字段類型。 BLOB是一個大文件,典型的BLOB是一張圖片或一個聲音文件,由於它們的尺寸,必須使用特殊的方式來處理(例如:上傳、下載或者存放到一個數據庫)。 根據Eric Raymond的說法,處理BLOB的主要思想就是讓文件處理器(如數據庫管理器)不去理會文件是什麽,而是關心如何去處理它。 但也有專家強調,這種處理大數據對象的方法是把雙刃劍,它有可能引發一些問題,如存儲的二進制文件過大,會使數據庫的性能下降。在數據庫中存放體積較大的多媒體對象就是應用程序處理BLOB的典型例子。 將圖片或者音頻等文件存入數據庫的原理,特別好理解,因為它們是文件,那麽就可以用函數讀,然後將讀出的內容保存在字符串中,然後再講該字符串存到數據庫中。 數據庫如下:
1
create table pic( 2 id tinyint primary key auto_increment not null, 3 image blob not null 4 )engine=myisam charset=utf8;

創建一個提交文件的表單,註意,提交文件的表單(form的屬性method="post" enctype="multipart/form-data")

 1 <form action="" method="post" enctype="multipart/form-data">
 2     <input type="file" name="pic" >
 3
<input type="submit" name="submit"> 4 </form> 5 6 <?php 7 if(!empty($_POST)){ 8 try { 9 $pdo=new PDO("mysql:host=localhost;dbname=test","root","root"); 10 $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 11 12
$statement=$pdo->prepare("insert into pic values (:id,:image)"); 13 14 //開始讀文件 15 $fp=fopen($_FILES[‘pic‘][‘tmp_name‘],"rb"); 16 $content=""; 17 $content=fread($fp,filesize($_FILES[‘pic‘][‘tmp_name‘])); 18 fclose($fp); 19 20 $statement->execute(["id"=>1,"image"=>$content]); 21 echo "the picture has been saved\n"; 22 } catch (PDOException $e) { 23 echo "failed to save the picture"; 24 echo $e->getMessage(); 25 } 26 } 27 ?>

可以中途輸出content的內容,或者運行完成後從數據庫中查看添加的內容,然而你卻看不懂內容是什麽,全是亂碼,但是,你成功將圖片保存到了數據庫。

接下來,你可以將數據庫中的圖片“數據”,讀出來,然後再以圖片的形式展示一下,看是不是已提交的那張圖片,代碼如下:

 1 <?php 
 2     try {
 3             $pdo=new PDO("mysql:host=localhost;dbname=test","root","root");
 4             $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
 5             $statement=$pdo->prepare("select * from pic");
 6             $statement->execute();
 7             list($id,$image)=$statement->fetch(PDO::FETCH_NUM);
 8             header("Content-Type:image/png");
 9             echo $image;
10         } catch (PDOException $e) {
11             echo "failed to open the picture";
12             echo $e->getMessage();
13         }
14 ?>

運用PDO存儲將圖片、音頻文件存入數據庫