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