我无法让我的代码与我的数据库一起使用。我几乎可以肯定它只是标点符号,因为我们教授给我们的视频太小了。我使用blob类型,图像小于1mb。这就是我所拥有的,它只是我试图放入数据库中的最后几个项目。它告诉我,我不能使用空值。这些是我得到的错误:
警告:fopen()[function.fopen]:第100行/home/wequpstu/public_html/admin/portfolioForm.php中的文件名不能为空
警告:fread()要求参数1为资源,布线在第101行的/home/wequpstu/public_html/admin/portfolioForm.php中给出
警告:fclose()要求参数1为资源,第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>" ;
答案 0 :(得分:1)
您的代码可能导致问题的几个问题如下:
话虽这么说,但不知道您要存储的字段类型是什么,也不知道图像文件有多大。将2GB上传存储为数据库中的字段可能不是一个明智的想法,但如果您想存储大图像,建议将数据流式传输到BLOB字段。
对于较小的文件,如果分配了足够的空间,您可以base64_encode将它们安全地放入TEXT
字段或VARCHAR
。在回读数据时,您可以使用base64_decode,或者只是在页面中显示图像,您可以像这样插入:
// 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 . '">';
另一种策略是你可以使用bin2hex()将二进制数据转换为十六进制,然后存储它。从数据库中读回时,您可以使用hex2bin()
为了帮助确定哪种方法最适合您,您应该read this article that explains when to use base64。 hex2bin
和bin2hex
方法与base64
方法没有相同的限制,因此它们更适合编码非常大的二进制数据。