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

时间:2013-12-15 11:46:12

标签: php mysql

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

?>

2 个答案:

答案 0 :(得分:0)

只有两件事:

  1. 您应该将临时文件复制到最终位置,而不是阅读上传文件的内容。详细讨论了here
  2. 您应该存储文件名,或者将临时文件复制到的路径,而不是插入文件的内容。
  3. 这里面临的最大挑战可能是如何处理文件名冲突(当上传2个同名文件时会发生什么)。你如何处理这种情况完全取决于应用程序。当所有文件都应该存储时,即使它们的文件名与之前上传的文件相同,你也可以随时在文件名中添加格式化的时间戳,或者使其独一无二的其他一些数据(我使用了日期和PID的组合)前)

答案 1 :(得分:0)

这不是准备生产的代码。

鉴于此,基本上您需要的是使用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();
    }
}