使用PHP在SQL数据库中存储文件的路径

使用PHP在SQL数据库中存储文件的路径,php,mysql,Php,Mysql,我想将网站用户上传的文件保存到我的数据库中。我已经用longblob(二进制)实现了这一点,但是我对保存上传文件的路径感兴趣 这是我的代码,我应该执行哪些修改 <?php require_once('Connections/databasestudents.php'); ?> <?php $fileName = $_FILES['file']['name']; $tmpName = $_FILES['file']['tmp_name']; $fileSize = $_FIL

我想将网站用户上传的文件保存到我的数据库中。我已经用longblob(二进制)实现了这一点,但是我对保存上传文件的路径感兴趣

这是我的代码,我应该执行哪些修改

<?php require_once('Connections/databasestudents.php'); ?>
<?php

$fileName = $_FILES['file']['name'];
$tmpName  = $_FILES['file']['tmp_name'];
$fileSize = $_FILES['file']['size'];
$fileType = $_FILES['file']['type'];

$fp      = fopen($tmpName, 'r');
$content = fread($fp, filesize($tmpName));
$content = addslashes($content);

$studentId = $_POST['studentId'];
fclose($fp);

$query = "INSERT INTO file (studentId, fileName, fileType, fileContent ) ".
"VALUES ('$studentId', '$fileName', '$fileType', '$content')";

mysql_select_db($database_databasestudents, $databasestudents);
mysql_query($query) or die('Error, query failed'); 

header("Location: students.php");
die();

?>

只有两件事:

  • 您应该将临时文件复制到其最终位置,而不是读取上载文件的内容。详细讨论
  • 您应该存储文件名或临时文件复制到的路径,而不是插入文件内容

  • 这里最大的挑战可能是如何处理文件名冲突(上传两个同名文件时会发生什么情况)。如何处理这种情况完全取决于应用程序。当所有文件都应该存储时,即使它们的文件名与以前上载的文件名相同,您也可以始终向文件名添加格式化的时间戳,或者添加一些使其唯一的其他数据(我以前使用过日期和PID的组合)

    这还没有准备好用于生产的代码

    鉴于此,基本上您需要使用
    move\u upload\u file
    上传文件。使用您的代码的一个基本片段是:

    require_once('Connections/databasestudents.php');
    
    if($_FILES)
    {
        $fileName = $_FILES['file']['name'];
        $tmpName  = $_FILES['file']['tmp_name'];
        $fileSize = $_FILES['file']['size'];
        $fileType = $_FILES['file']['type'];
    
        // $fp      = fopen($tmpName, 'r');
        // $content = fread($fp, filesize($tmpName));
        // $content = addslashes($content);
    
        if(move_uploaded_file($_FILES['file']['tmp_name'], $_FILES['file']['name']))
        {
            $studentId = $_POST['studentId'];
            // fclose($fp);
    
            $query = "INSERT INTO file (studentId, fileName, fileType, fileContent ) ".
            "VALUES ('$studentId', '$fileName', '$fileType', '$content')";
    
            mysql_select_db($database_databasestudents, $databasestudents);
            mysql_query($query) or die('Error, query failed'); 
    
            header("Location: students.php");
            die();
        }
    }  
    

    谢谢,所以在数据库中,我发现新上传的文件具有正确的id。文件名保存正确。但是,文件内容为空,文件类型中填充了此内容(image/png)。另外,当我试图检索(下载)上传的文件时,它显示该文件已损坏。上传过程似乎有问题。。知道为什么吗?在
    if($\u文件)
    insert
    var\u dump($\u文件)之后。这将返回一个数组,其中包含文件大小、错误等文件数据。
    type
    是您上载的文件的MIME类型,因此image/png但文件内容为零。。?例如,我应该为数据库中的文件路径创建一个新字段吗?我看不到存储的任何路径。很抱歉给您带来不便,但我对PHP和SQLU都是新手。请您发布返回的
    var\u dump($\u文件)?数组(大小=1)'file'=>array(大小=5)'name'=>string'basem.png'(长度=9)'type'=>string'image/png'(长度=9)'tmp_name'=>string'C:\wamp\tmp\phpEADA.tmp'(长度=23)'error'=>int 0'size'=>int 20709