PHP:上传,下载.pdf文件,不使用上传文件的表格,文件会受到损坏。

PHP:上传,下载.pdf文件,不使用上传文件的表格,文件会受到损坏。,php,mysql,file,pdf,Php,Mysql,File,Pdf,我正在使用html和php制作一个基于web的系统,其中一个功能是允许学生将文件上传到数据库,实际上是3个文件。 我创建了一个file类型的输入字段,我确信我的PHP是正确的,但有时会出现一个我不理解的警告,并且查询不起作用。但这种情况并不总是发生。。通常不会 以下是HTML中的一个字段: <tr><td> <p><span>C.V: </span> </td><td> <input class="con

我正在使用html和php制作一个基于web的系统,其中一个功能是允许学生将文件上传到数据库,实际上是3个文件。 我创建了一个file类型的输入字段,我确信我的PHP是正确的,但有时会出现一个我不理解的警告,并且查询不起作用。但这种情况并不总是发生。。通常不会

以下是HTML中的一个字段:

<tr><td> <p><span>C.V:  </span> </td><td> <input class="contact" type="file" id ="CV" name="CV" value="" required /></p> </td></tr> 
警告:

警告:mysql\u query():mysql服务器已离开…第330行

330.  $result=mysql_query($qry);
警告:mysql_query():读取结果集标题时出错…第330行

330.  $result=mysql_query($qry);
在数据库中,我没有使用上传文件的表格,我只需要内容,但我不关心类型,因为它将始终是pdf,我不关心名称,只要它存储在正确的列中

我不确定这是否是问题所在?但我不这么认为,因为有些文件被成功上传,而其他大小不同的文件则没有


我在检索文件时面临的另一个问题。。 当我下载该文件时,我正确地将其作为.pdf文件,但当我打开它时,它表明该文件已损坏。。我不知道为什么?可能是因为我使用的是本地服务器?虽然我不这么认为,但我已经厌倦了试图弄清楚:(如果以前有人遇到过这样的问题,或者如果你知道如何解决这个问题,请帮助我

HTML:

<a href='updatestudentlist.php?id=".$ksuid."&file=00'>CV</a> <br/>

问题的第一部分主要与MySQL服务器的连接问题有关。可能发生的原因有很多。请检查此链接以了解不同的原因。

问题的第一部分主要与MySQL服务器的连接问题有关。可能发生的原因有很多。请检查此链接出于不同的原因

这里有多个问题,主要集中在如何使用数据库上

1) 您不应该使用
mysql\u query()
与您的数据库进行接口,因为您更倾向于使用更好、更新的库(例如)。特别是,MySQL扩展缺少的一个主要特性是prepared语句,这间接地解释了为什么您会收到服务器消失的警告

除了使用当前代码使自己面临注入攻击之外,它还生成一个非常大的SQL查询(因为您将PDF本身包含在查询字符串中以更新学生档案)。如果单个查询执行时间过长,则会断开与服务器的连接(这会发出该特定警告)。因此,上传较大的PDF文件时会出现错误,而上传较小的PDF文件时会出现错误

如果改为使用MySQLi扩展中提供的prepared语句,服务器将能够处理极短的查询,然后等待传递参数,其中超大的PDF文件字符串就是其中之一


2) 您的文件被视为“已损坏”,因为您在将其插入数据库之前正在对其使用
addslashes()
,而在将其拉出时未使用
stripslashes()
。因此,您提供的PDF中大部分数据都是正确的,但其中有一大堆额外的斜杠,这使PDF阅读器无法阅读。

这里有多个问题,主要集中在如何使用数据库上

1) 您不应该使用
mysql\u query()
与您的数据库进行接口,因为您更倾向于使用更好、更新的库(例如)。特别是,MySQL扩展缺少的一个主要特性是prepared语句,这间接地解释了为什么您会收到服务器消失的警告

除了使用当前代码使自己面临注入攻击之外,它还生成一个非常大的SQL查询(因为您将PDF本身包含在查询字符串中以更新学生档案)。如果单个查询执行时间过长,则会断开与服务器的连接(这会发出该特定警告)。因此,上传较大的PDF文件时会出现错误,而上传较小的PDF文件时会出现错误

如果改为使用MySQLi扩展中提供的prepared语句,服务器将能够处理极短的查询,然后等待传递参数,其中超大的PDF文件字符串就是其中之一


2) 您的文件被视为“已损坏”,因为您在将其插入数据库之前正在对其使用
addslashes()
,而在将其拉出时未使用
stripslashes()
。因此,您提供的PDF中大部分数据都是正确的,但其中有一大堆额外的斜杠,这会使PDF阅读器无法阅读。

停止使用此代码
addslashes()
完全是无用的垃圾,不会阻止sql注入。您没有正确处理文件上载,只是假设所有上载都成功。您以后的代码完全可以使用。请停止使用此代码
addslashes()
完全是无用的垃圾,不会阻止sql注入。您没有正确处理文件上载,只是假设所有上载都成功。您以后的代码完全开放给用户。
<a href='updatestudentlist.php?id=".$ksuid."&file=00'>CV</a> <br/>
    if(isset($_GET['file'])){ 
    $file=intval($_GET['file']);
    if($file==00) //I use this cause other files got different numbers
    {

        $query = "SELECT CV FROM student WHERE KSUID='".$_GET['id']."'"; 
        $result = mysql_query($query) or die('Error, query failed'); 
        list($content) = mysql_fetch_array($result);

        header("Content-type: application/pdf");
        header("Content-Disposition: attachment; filename=".$_GET['id']."_CV"); 
        echo $content; 
        exit; 
    }
}