从SQL数据库下载文件时出错


Getting Errors When Downloading Files From SQL Database

我正在运行一个网站,该网站的一部分允许用户将文件上传到SQL数据库,然后下载。下载本身可以工作,但文件已损坏。无法打开图像文件,文档文件显示为空白。我将在下面附上我的上传脚本和下载脚本。

  $classid = $_POST['uploadclass'];
$userid = $_SESSION['id'];
$view = $_POST['view']; 
$filename = $_FILES['uploadfile']['name'];
$tmpname = $_FILES['uploadfile']['tmpname'];
$filesize = $_FILES['uploadfile']['size'];
$filetype = $_FILES['uploadfile']['type'];
$fp = fopen($tmpname, 'r');
$content = fread($fp, filesize($tmpname));
$content = addslashes($content);
fclose($fp);
if (!get_magic_quotes_gpc()){
 $filename = addslashes($filename);
}
$query = "INSERT INTO uploads VALUES('','$filename', '$filetype', '$filesize', '$content', '$userid', '$classid', '$view', 'no')";
$run = mysqli_query($connect, $query);
mysqli_close($connect);
header('location: files.php');

下面是我的下载页面的代码。

$query = "SELECT * FROM uploads WHERE id=$id";
$run = mysqli_query($connect, $query);
while ($row = mysqli_fetch_assoc($run)){
$name = $row['name'];
$type = $row['type'];
$size = $row['size'];
$content = $row['content'];
}
header("Content-length: $size");
header("Content-type: $type");
header("Content-Disposition: attachment; filename=$name");
echo $content;
?>

在将文件插入数据库时,您错误地处理了文件和其他所有内容。所有已经存在的文件都已损坏,并且可能已销毁。

addslashes()不是数据库的转义函数。始终使用您正在使用的DB扩展附带的转义函数。如果您使用的是mysqli,那么正确的函数必须是mysqli_real_escape_string()

然而,你应该看看准备好的陈述。这些将使用不同的方式传输不需要转义的数据。不过,一定要注意神奇语录的设置。首选设置为OFF,并且从5.4开始的最新PHP版本已经删除了此功能。因此,无论如何都必须处理对插入数据库的数据进行转义的问题。