更改了使用php从mysql数据库下载的文件

更改了使用php从mysql数据库下载的文件,php,mysql,file,file-upload,download,Php,Mysql,File,File Upload,Download,我可以上传一个文件到mysql,但当我下载它时,内容会发生变化。。我有test.txt的例子 “你好” 在上面。。当我下载它时,test.txt变为 字符串'sfasfsafasfsaf'(长度=14) sfasfsafasfsaf 不确定,怎么了 这是我下载文件的代码: <?php include("class_lib.php"); $db = new database(); $db->connect(); if(isset($_GET["

我可以上传一个文件到mysql,但当我下载它时,内容会发生变化。。我有test.txt的例子

“你好”

在上面。。当我下载它时,test.txt变为

字符串'sfasfsafasfsaf'(长度=14)
sfasfsafasfsaf

不确定,怎么了

这是我下载文件的代码:

<?php include("class_lib.php"); 
        $db = new database();
        $db->connect();
    if(isset($_GET["file_id"])){
                    $file_id = $_GET["file_id"];

                    $query = "SELECT filename, filetype, filesize, bin_data " .
                                "FROM file_tbl WHERE id = '$file_id'";

                    $result = mysql_query($query) or die('Error, query failed' . mysql_error());
                    list($filename, $filetype, $filesize, $bin_data) = mysql_fetch_array($result);
                     var_dump($bin_data);  

                    header("Content-length: $filesize");
                    header("Content-type: $filetype");
                    header("Content-Disposition: attachment; filename=$filename");
                    echo $bin_data;

            }
?>

这里到底出了什么问题???

您正在不计后果地将二进制数据干扰到数据库中,甚至连一丝错误都没有。你以为会发生什么?这个简短的代码示例中充满了严重的SQL注入错误,我希望它不会部署在公共互联网上

为了您自身的安全,您应该立即停止使用吱吱作响的、陈旧的、不推荐使用的
mysql\u query
界面,并花少量时间将查询切换到PDO

如果使用占位符,则不会出现类似的问题


您看到的可能是您在输出正确内容之前虚假的
var\u dump
语句的结果。

如果上载文件没有问题,请尝试此操作。 您可以在将二进制数据插入数据库时将其编码为64格式,也可以在下载之前对其进行解码

<?php 
ob_start();     
include("class_lib.php");
$db = new database();
$db->connect();
    if(isset($_GET["file_id"])){
          $file_id = $_GET["file_id"];
          $query = "SELECT filename, filetype, filesize, bin_data " .
                            "FROM file_tbl WHERE id = '$file_id'";

          $result = mysql_query($query) or die('Error, query failed' . mysql_error());
          list($filename, $filetype, $filesize, $bin_data) = mysql_fetch_array($result);
          var_dump($bin_data);  
          ob_end_clean();
          header("Content-length: $filesize");
          header("Content-type: $filetype");
          header("Content-Disposition: attachment; filename=$filename");
          echo $bin_data;
          exit;
  }

不过还是要谢谢你,我知道了。。我之前做的是单页提交,这就是我下载原始文件时更改它的原因。请注意您的SQL注入错误。您真的,真的需要至少对输入查询的任何和所有值使用
mysql\u real\u escape\u string
<?php 
ob_start();     
include("class_lib.php");
$db = new database();
$db->connect();
    if(isset($_GET["file_id"])){
          $file_id = $_GET["file_id"];
          $query = "SELECT filename, filetype, filesize, bin_data " .
                            "FROM file_tbl WHERE id = '$file_id'";

          $result = mysql_query($query) or die('Error, query failed' . mysql_error());
          list($filename, $filetype, $filesize, $bin_data) = mysql_fetch_array($result);
          var_dump($bin_data);  
          ob_end_clean();
          header("Content-length: $filesize");
          header("Content-type: $filetype");
          header("Content-Disposition: attachment; filename=$filename");
          echo $bin_data;
          exit;
  }