您好,我正在尝试从数据库接收我的图像。我已经可以插入图像,但我不知道是那边出了问题还是我在获取图像时做了什么错误。
插入图片的代码:
public function Save(){
/*** check if a file was uploaded ***/
if(is_uploaded_file($_FILES['userfile']['tmp_name']) && getimagesize($_FILES['userfile']['tmp_name']) != false)
{
/*** get the image info. ***/
$size = getimagesize($_FILES['userfile']['tmp_name']);
/*** assign our variables ***/
$type = $size['mime'];
$imgfp = fopen($_FILES['userfile']['tmp_name'], 'rb');
$size = $size[3];
$name = $_FILES['userfile']['name'];
$maxsize = 99999999;
/*** check the file is less than the maximum file size ***/
if($_FILES['userfile']['size'] < $maxsize )
{
/*** connect to db ***/
$db = new Db();
/*** our sql query ***/
$sql = "INSERT INTO Foto (image_type ,image, image_size, image_name)
VALUES ('". $type ."',
'". $imgfp ."',
'". $size ."',
'". $name ."');";
$db->conn->query($sql);
$sql = "SELECT * FROM Foto ORDER BY id DESC LIMIT 1;";
$select = $db->conn->query($sql);
$numberofRows = $select->num_rows;
if($numberofRows == 1)
{
while ($oneSelect = $select->fetch_assoc())
{
return $oneSelect;
}
} else {
throw new Exception("Fout");
}
}
else
{
throw new Exception("Bestand is te groot");
}
}
else
{
throw new Exception("Dit extensie is niet ondersteund");
}
}
加载图像的代码:
<?php
include_once("classes/Db.class.php");
//$id = $_GET['id'];
$id = "33";
$db = new Db();
$sql = "SELECT image, image_type FROM Foto WHERE id = '". $id ."';";
$result = $db->conn->query($sql);
$row = $result->fetch_assoc();
if(sizeof($row) == 2)
{
header("Content-type: ".$row['image_type']);
echo $row['image'];
}
else
{
throw new Exception("Out of bounds Error");
}
?>
最佳答案
您实际上并没有插入图像数据。阅读fopen()
函数时,它不返回图像数据,而是返回一个可用于读取或写入文件的文件句柄(例如,使用 fread()
或 fwrite()
)。简单的方法是使用 file_get_contents()
.
但是请听我的建议,将图像存储在数据库中确实是不好的做法。它们是文件,最好存储在文件系统上(因此得名)。也使服务速度更快,因为无需执行 PHP 请求。将文件名以及可能的文件相对路径存储在数据库中。
关于php - 未从数据库 PHP LongBlob 接收图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23035425/