2013-03-25 59 views
1

在我當前的代碼中,我只插入文件的文件名,文件存儲在一個文件夾中。 我也想將文件存儲在我的mysqldatabase中。我怎樣才能做到這一點。PHP在mysql數據庫中插入文件

我的表: ID FILE_NAME fcontent(LONGBLOB)

include 'db.php'; 
if(isset($_FILES['image'])){ 
    $errors= array(); 
    $tablename = "files"; 
    $file_name = $_FILES['image']['name']; 
    $file_size =$_FILES['image']['size']; 

    $file_tmp =$_FILES['image']['tmp_name']; 
    $content =$_FILES['image']['fcontent']; // content in database 

    $sql="INSERT INTO $tablename(file_name,content)VALUES('" . mysql_real_escape_string($file_name) . "')"; // here i need to insert the content i assume 

    $file_ext=strtolower(end(explode('.',$_FILES['image']['name']))); //convert to lower 

$extensions = array("jpeg","jpg","png","txt","html","php","gif"); // File extension that are 

allowed 

if(in_array($file_ext,$extensions)=== false){ // check if value exists in array 
    $errors[]="extension not allowed."; 


    } 
    if($file_size > 2097152){ // cant be greater than 2mb 
    $errors[]='File size must be excately 2 MB'; 

    }    
    if(empty($errors)==true){ 
     mysql_query($sql); 
     move_uploaded_file($file_tmp,"upload/".$file_name); 

     echo "Success"; 
     header("location:files.php"); // Send back to main page 

    }else{ 
     print_r($errors); 
} 

} 
?>  
+0

一般來說它來存儲文件的最佳實踐在一個文件夾中,並將名稱存儲在數據庫中。數據庫中是否存在需要該文件的特定原因? – 2013-03-25 16:46:23

+0

你從** NOT **開始將文件放入數據庫。很少有使用情況證明它的合理性,並且缺點是令人討厭的。你也開始有適當的上傳處理代碼,並且** NOT **假設上傳成功。 – 2013-03-25 16:46:52

+0

爲什麼要將文件存儲在數據庫中?在大多數應用程序中,這是一個糟糕的主意。考慮到你現在不知道該怎麼做,我想知道你是否也真的想過要做這件事的原因。 – 2013-03-25 16:46:58

回答

4

就我而言,我不建議將圖像存儲在數據庫中,原因如下: - 管理太重。 - 速度不足(儘管更多的圖像如果很重)。

所以我建議你把圖像在一個目錄,它的屬性(類型,大小,作者..),當然還有他們的鏈接到數據庫的目錄,

+0

數據庫中要存儲圖像的字段類型是什麼? – Franky 2013-03-25 16:54:56

+0

我用longblob – Ben 2013-03-25 16:57:34

+0

試圖按照這個教程[鏈接](http://forum.codecall。net/topic/40286-tutorial-stored-images-in-mysql-with-php /#sthash.kFu7uQAt.dpbs)我認爲這會有幫助。 – Franky 2013-03-25 17:02:42

-1

你有什麼問題?有關於這個問題的各種主題,一個是this

+1

進行備份和恢復時,這並不意味着什麼有意義的答案,而是一個很好的評論。 – SparKot 2013-03-25 16:49:30

+0

@kingkero我的問題是,我不能讓它存儲在數據庫中的文件。現在即時我只插入文件名,但當我嘗試插入內容它不工作 – Ben 2013-03-25 16:49:56

3

目前我能想到的兩種方式

1.使用mysql中

BLOB  
MEDIUMBLOB 
LONGBLOB 

數據類型... 得到使用file_get_contents()和插入內容內容

  1. 使用

    text 
    

    數據類型..編碼的內容,然後保存內容..

或者,你可以在表列中存儲只是文件的路徑......像商店http://domain/img.jpg

+0

但個人,我不喜歡存儲圖像數據庫..因爲它增加了大小歧管 – alwaysLearn 2013-03-25 16:56:31

+0

你能告訴我一個如何做到這一點的例子嗎? – Ben 2013-03-25 16:59:27

+0

看到這個http://forum.codecall.net/topic/40286-tutorial-storing-images-in-mysql-with-php/#sthash.HqQQleWW.dpbs – alwaysLearn 2013-03-25 17:00:38