首先,谢谢你看看这个。请允许我解释一下:
我在磁盘上有图像,我想在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语句中的代码总是显示一个图像,因此我怀疑在读取文件或显示文件时发生的数据损坏。
请帮助我了解发生了什么。
谢谢!
答案 0 :(得分:-1)
你应该对图像进行base64编码并将它们存储在一个longtext字段中,至少这是我的工作,我发现它工作得很好。此外,从数据库中获取base64记录时,您可以将base64字符串回显到images src属性中......这里是文档:http://php.net/manual/en/function.base64-encode.php