如何在Db中将图像插入到ZendFramework中作为blob
答
在你的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;
我有与它的问题很多,尽量让你保存工作也不要在直接将其存入数据库以测试读数。这不会使它成为可能,除非你知道正确的数据库编码(我不这样做)。
您意识到将图像存储在磁盘上并将URL存储到数据库中通常好得多? – JasonDavis 2009-08-04 14:08:21
有人可以帮忙说一下如何在存储之后得到“out”? – 2009-08-11 19:06:42