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


Storing the path of the file in SQL database using PHP

我想将网站用户上传的文件保存到我的数据库中。我已经使用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();
?>

这还没有为生产做好代码准备。

考虑到这一点,基本上您需要的是使用move_uploaded_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();
    }
}  

只有两件事:

  1. 与其读取上传文件的内容,不如将临时文件复制到其最终位置。此处详细讨论
  2. 您应该存储文件名或临时文件复制到的路径,而不是插入文件的内容

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