php - 未从数据库 PHP LongBlob 接收图像

标签 php mysql

您好,我正在尝试从数据库接收我的图像。我已经可以插入图像,但我不知道是那边出了问题还是我在获取图像时做了什么错误。

插入图片的代码:

    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/

相关文章:

php - zend框架中填充子表单的问题

mysql - 一次导出和导入所有 MySQL 数据库

mysql - MariaDB - 如何使用 IF/ELSE 从另一个表中添加(加入)一列

mysql - LEFT JOIN 与主查询的相对值

php - 在从 mysql 加载的列表框中插入选项

mysql - 在不填充数据的脚本中加载数据本地INFILE(mysql)

php rabbitmq如何检查队列是否存在

php - PDO 绑定(bind)参数空值

php - 为什么 drupal 很慢?

php - PHP如何处理同一个独占锁的两个进程?