将图像从磁盘导入MySQL数据库时图像损坏

时间:2012-08-24 17:02:21

标签: php mysql image store

首先,谢谢你看看这个。请允许我解释一下:

我在磁盘上有图像,我想在longblob字段中放入数据库。我已经读到这通常是不鼓励的,但这仍然是我申请中所需要的。

要导入图像,我的课程中有以下代码:

$file_handle = fopen("$folder_path/$image","rb");
$file_content = fread($file_handle,filesize("$folder_path/$image"));

$image_record["file_name"] = $image;
$image_record["file_folder_id"] = $folder_data["folder_id"];
$image_record["file_owner_id"] = $this->current_user_data["user_id"];
$image_record["file_mime_type"] = mime_content_type("$folder_path/$image");
$image_record["file_binary"] = addslashes($file_content);

if($this->db_insert("file", $image_record))
{

    $this->view_file($this->load_file($image));
    echo header("Content-type:".$image_record["folder_type"]);
    $this->view_file($this->load_file($image));
    echo stripslashes($image_record["folder_binary"]);
}

当我尝试将二进制文件保存到数据库时,图像数据似乎被该过程破坏了。

使用完全相同的代码,$ db-> insert()语句在具有几乎相同的数据库模式的另一个网站上工作得很好,除了它工作的那个,存储引擎是InnoDB而不是MyISAM。

if语句中的代码总是显示一个图像,因此我怀疑在读取文件或显示文件时发生的数据损坏。

请帮助我了解发生了什么。

谢谢!

1 个答案:

答案 0 :(得分:-1)

你应该对图像进行base64编码并将它们存储在一个longtext字段中,至少这是我的工作,我发现它工作得很好。此外,从数据库中获取base64记录时,您可以将base64字符串回显到images src属性中......这里是文档:http://php.net/manual/en/function.base64-encode.php