通过php向数据库添加图像

通过php向数据库添加图像,php,Php,我很难让我的代码与我的数据库一起工作。我几乎可以肯定这只是标点符号,因为教授给我们的视频太小了。我使用的是blob类型,图像小于1mb。这就是我所拥有的,它只是我试图放入数据库中的最后几个无法正常工作的项目。它告诉我不能使用空值。以下是我遇到的错误: 警告:fopen()[function.fopen]:第100行的/home/wequpstu/public_html/admin/portfolioForm.php中的文件名不能为空 警告:fread()要求参数1为resource,布尔值在第1

我很难让我的代码与我的数据库一起工作。我几乎可以肯定这只是标点符号,因为教授给我们的视频太小了。我使用的是blob类型,图像小于1mb。这就是我所拥有的,它只是我试图放入数据库中的最后几个无法正常工作的项目。它告诉我不能使用空值。以下是我遇到的错误:

警告:fopen()[function.fopen]:第100行的/home/wequpstu/public_html/admin/portfolioForm.php中的文件名不能为空

警告:fread()要求参数1为resource,布尔值在第101行的/home/wequpstu/public_html/admin/portfolioForm.php中给出

警告:fclose()要求参数1为resource,布尔值在第102行的/home/wequpstu/public_html/admin/portfolioForm.php中给出

$handle = fopen($_FILES['imgPhoto']['tmpName'], "r");
        $image = fread($handle, filesize($_FILES['imgPhoto']['tmpName']));
        fclose($handle);

        $image = mysqli_real_escape_string($dbConnection, $image);
        mysqli_query($dbConnection, "INSERT INTO portfolio (title, shortDescription,     longDescription, image, imageName, imageType, imageSize) VALUES ('$_POST[txtTitle]', '$_POST[txtShortDescription]', '$_POST[txtLongDescription]', '$image', '" . $_FILES['imgPhoto']['name'] ." ',  ' " . $_FILES['imgPhoto']['type']. " ',  '" . $_FILES['imgPhoto']['size']."'  )");

        echo "<p style=\"text-align: center; font-size: 11px;\">Thanks for filling out form!</p>";
        echo "</fieldset></form>" ;

$handle=fopen($_文件['imgPhoto']['tmpName'],“r”);

$image=fread($handle,filesize($_FILES['imgPhoto']['tmpName']); fclose($handle); $image=mysqli\u real\u escape\u字符串($dbConnection,$image); mysqli_query($dbConnection),“插入到公文包(标题、简短描述、长描述、图像、图像名称、图像类型、图像大小)值(“$_POST[txtTitle]”,“$_POST[txtShortDescription]”,“$_POST[txtLongDescription]”,“$_文件['imgPhoto']['name']”,“,“$_文件['imgPhoto']['type']”,“,“$"."' )"); echo“

谢谢您填写表格!

”; 回声“;
可能导致问题的代码问题如下:

  • 请勿在插入之前转义二进制数据
  • 将上传的二进制数据插入数据库是一个巨大的禁忌。这可能会在不经意间导致对服务器的一些非常恶意的攻击,这些攻击超出了简单的SQL注入
也就是说,不知道要存储到的字段类型是什么,也不知道图像文件有多大。将2GB上传作为字段存储在数据库中可能不是一个明智的想法,但如果您想存储大型图像,建议将数据流式传输到BLOB字段中

对于较小的文件,如果分配了足够的空间,您可以将它们安全地放入
TEXT
字段或
VARCHAR
。当读取回数据时,您可以使用,或者如果只是在页面中显示图像,则可以按如下方式插入:

// get the base64 data from the database field named 'image'
$image = $row['image'];

// echo out an image tag containing the base64 encoded image. no decoding required
echo '<img src="data:image/png;base64,' . $image . '">';
//从名为“image”的数据库字段中获取base64数据
$image=$row['image'];
//回显包含base64编码图像的图像标记。不需要解码
回声';
另一种策略是,您可以使用将二进制数据转换为十六进制,然后将其存储。在从数据库中读取数据时,可以使用


为了帮助决定哪种方法最适合你,你应该。
hex2bin
bin2hex
方法没有与
base64
相同的限制,因此它们更适合于编码非常大的二进制数据。

此外,请转义其他POST变量。@DavidHoude-正确。如果使用准备好的语句和
filter\u var
则不需要转义。更新此解决方案以提供存储大型图像的替代方案,添加了一些指向各种php命令的链接和参考,以帮助确定哪种方法更合适。请在您的问题中添加以下信息-图像有多大(KB)?您试图将二进制数据存储到的字段类型和大小是什么?$\u文件['imgPhoto']['tmpName']为空。您可以打印阵列,以便使用print\r($\u文件)进行调试;