如何在Db中将图像插入到ZendFramework中作为blob

问题描述:

我想以blob格式将图像插入到db。 如何在zend框架中编写程序。 一个简单的形式 只需选择一个图像并插入到数据库中。如何在Db中将图像插入到ZendFramework中作为blob

+0

您意识到将图像存储在磁盘上并将URL存储到数据库中通常好得多? – JasonDavis 2009-08-04 14:08:21

+0

有人可以帮忙说一下如何在存储之后得到“out”? – 2009-08-11 19:06:42

在你的Zend形式创建一个文件元素:

$element = new Zend_Form_Element_File('fileElement'); 

然后你可以上传的图片插入到你的数据库中的BLOB格式是这样的:

$conn = new PDO("mysql:host='host';dbname='database'", 'userName', 'password'); 

$imagePath = $zendForm->fileElement->getFileName(); 
$image = file_get_contents('$imagePath'); 

$sql = "INSERT INTO images (data) values(?)"; 

$q = $conn->prepare($sql); 
$q->bindParam(1, $image, PDO::PARAM_LOB); 
$q->execute(); 

使用file_get_contents作为字符串读取并存储它。

也就是说,将实际图像数据存储在数据库中很不明智。更好的做法是生成一个唯一的文件名并将其存储在数据库中。

+0

同意,DB中的BLOB通常会很慢并且会导致DB膨胀。 – 2009-08-04 13:13:15

下面是一些代码来保存文件中的Zend:

// This is to save in saveAction() 
$source = $this->view->form->upload->getFileName(); 
$fp = fopen($source,'r'); 
$content = fread($fp,filesize($source)); 
// I don't use addslashes, because i already have that in my mapper 

fclose($fp); 

$model->image  = base64_encode($content); 
// Save here 


// This is to read in imagesAction() 
$this->_helper->Layout()->disableLayout(); 
$this->_helper->ViewRenderer->setNeverRender(); 

header('Content-Type: image/gif'); 
echo base64_decode($image);  
exit; 

我有与它的问题很多,尽量让你保存工作也不要在直接将其存入数据库以测试读数。这不会使它成为可能,除非你知道正确的数据库编码(我不这样做)。