PHP在mysql数据库中插入文件

问题描述:

在我当前的代码中,我只插入文件的文件名,文件存储在一个文件夹中。 我也想将文件存储在我的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

就我而言,我不建议将图像存储在数据库中,原因如下: - 管理太重。 - 速度不足(尽管更多的图像如果很重)。

所以我建议你把图像在一个目录,它的属性(类型,大小,作者..),当然还有他们的链接到数据库的目录,

+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

你有什么问题?有关于这个问题的各种主题,一个是this

+1

进行备份和恢复时,这并不意味着什么有意义的答案,而是一个很好的评论。 – SparKot 2013-03-25 16:49:30

+0

@kingkero我的问题是,我不能让它存储在数据库中的文件。现在即时我只插入文件名,但当我尝试插入内容它不工作 – Ben 2013-03-25 16:49:56

目前我能想到的两种方式

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