2009-08-04 10 views
3

Ich möchte ein Bild im Blob-Format in db einfügen. Wie schreibe ich ein Programm in Zend Framework. ein einfaches Formular wählen Sie einfach ein Bild und fügen Sie in db.wie ein Bild in Db als Blob in ZendFramework einfügen

+0

Sie erkennen, es ist im Allgemeinen viel besser, ein Bild auf der Festplatte zu speichern und speichern Sie einfach die URL zu dem Bild in einer DB? – JasonDavis

+0

Kann jemand helfen, indem er sagt, wie man das "out" nach dem Speichern bekommt? –

Antwort

2

In Ihrer Zend Form eine Datei Element erstellen:

$element = new Zend_Form_Element_File('fileElement'); 

Dann können Sie das hochgeladene Bild auf Ihre DB in BLOB-Format wie folgt einfügen:

$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(); 
+0

ooo Entschuldigung, ich benutze Zend-Modell-Klasse und $ tablename = new Zend_model_Photo(); $ Tabellenname-> save(); auf diese Weise bin ich die Daten speichern ... so kann ich nicht erwähnen, die "$ sql =" INSERT INTO Bilder (Daten) Werte (?) ";" Drüben .... – coderex

2

Lesen Sie es als eine Zeichenfolge mit file_get_contents und speichern Sie diese.

Das heißt, es ist selten eine gute Idee, die tatsächlichen Bilddaten in der Datenbank zu speichern. Es empfiehlt sich, einen eindeutigen Dateinamen zu generieren und diesen stattdessen in der Datenbank zu speichern.

+0

Vereinbart, BLOB in DB wird oft langsam und tragen zu DB Bloat bei. –

+0

gibt es irgendeine zusätzliche Funktion oder Methode, während ein Blob über das Zend Framework in db eingefügt wird? oder einfache Modellklassenstruktur? Ich bin nicht in der Lage, Blob-Feld einfügen, Rest andere Felder eingefügt werden, aber nur Problem ist mit dem Blog – coderex

0

Hier einiger Code ist zu retten Datei in 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; 

ich eine Menge Probleme mit sich, versuchen sie, Ihre Arbeit zu machen speichern und nicht in Sert es direkt in die Datenbank, um das Lesen zu testen. Dies wird es nicht möglich machen, es sei denn, Sie kennen die korrekte db-Codierung (was ich nicht weiß).