[zend][db] fetchAll mit mehreren Variablen
Ich versuche, fetchAll, die auf einer Abfrage mit 2 Variablen. Ich kann nicht herausfinden, die syntax.
Ich kann mit nur 1 variable:
$sql = "SELECT * FROM mytable WHERE field1 = ?";
$this->_db->fetchAll($sql,$value1); # that works
Aber ich habe einige Probleme bei der Abfrage mehrere Variablen
$sql = "SELECT * FROM mytable WHERE field1 = ? AND field2 = ?";
$this->_db->fetchAll($sql,$value1,$value2); # doesn't work
$this->_db->fetchAll($sql,array("field1"=>$value1,"field2"=>$value2)); # doesn't work either
Der Grund, warum, den ich nutzen möchte ? statt die Variablen direkt in die Abfrage ist, dass ich gelernt habe, einsetzen?? ermöglicht die Abfrage kompiliert werden, werden generisch durch die db engine und verbessert die Performance.
InformationsquelleAutor Max | 2010-07-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es zwei Arten von parameter namens Parameter und positions - Parameter. Sie mischen die zwei Typen und das wird nicht funktionieren.
Benannte Parameter übereinstimmen Platzhalter durch den Namen. Die Namen begannen mit der
:
symbol. Die Namen der parameter sind nicht die gleichen wie die Namen der Spalten, die Sie passieren, um Sie für den Einsatz. Sie liefern die parameter-Werte in einem assoziativen array, mit den parameter-Namen (nicht die Spalte-Namen) als array-Schlüssel. Zum Beispiel:Positions-Parameter verwenden, die
?
symbol für die Platzhalter. Sie liefern die parameter-Werte mit einem einfachen (nicht-assoziativen) Arrays und die Reihenfolge der Werte im array muss mit der Reihenfolge der Platzhalter für parameter in Ihre Abfrage. Zum Beispiel:Den meisten Marken der SQL-Datenbank nativ unterstützt nur eine Art oder die andere, aber PDO-versuche zu unterstützen, durch umschreiben der SQL-falls notwendig vor der Herstellung der Abfrage. Da Zend_Db ist nach dem Vorbild der PDO, Zend_Db unterstützt auch den parameter styles.
InformationsquelleAutor Bill Karwin
Diese Frage ist ein bisschen alt, aber ich dachte, ich würde nur hinzufügen, um es als Referenz Willen.
Ich würde empfehlen, beginnend Nutzung von Zend_Db_Select mit Zend_Db. Ich habe dabei eine Menge mit Zend_Db in letzter Zeit. Mehr von Zend_Db_Select reference guide.
Können davon ausgehen, dass Sie eine Zend_Db adapter: $this->_db
Dass die Grundlagen aus den von Ihnen gegebenen Beispiel, aber das Zend Framework reference guide auf der select-Objekt hat eine Menge guter Informationen darüber, wie zu bauen, auch komplexere Abfragen mit JOINS, UNIONS -, GROUP BY, LIMIT, etc.
Wenn Sie wollten, um die Verwendung eines alias-name für eine Tabelle oder Parameter, die Sie verwenden ein assoziatives array mit den alias-Namen als index-Wert:
Wenn Sie zurückkehren möchten nur ausgewählte Felder, die Sie hinzufügen, ein array von Feldname als ein zweiter parameter:
Tatsächlich, die oben genannten könnte produzieren sollte vollständig qualifizierten SQL:
aber ich schrieb oben für Kürze und Klarheit im Beispiel.
Eine Sache, die ich gerade stieß, ist die Verwendung von und-UND ODER in der WHERE-Bedingung.
Beachten Sie, dass alles, was in der folgenden "wo" - Funktion, die Sie verwenden, kombiniert mit der vorherigen Anweisung, operand. Ok, das Klang verwirrend.
Wenn das zweite "wo" ist "ODER" es wird sein "ODER" bedingte. Wenn das zweite "wo" ist "UND" die Anweisung "UND".
In anderen Worten, die erste, WO Funktion wird ignoriert, in Bezug auf welche Bedingung es verwendet wird.
In der Tat, ich fragte nur eine Frage auf Stack Overflow, die gestern in Bezug auf tut a komplexe, in DENEN mit wählen Sie.
Hoffe, das hilft!
Prost!
InformationsquelleAutor jmbertucci
Versuchen Sie dies:
$this->_db muss eine Instanz der Db-adapter.
InformationsquelleAutor Ololo
Hier ist der eigentliche Zend Möglichkeit, code für diese.
$sql = "SELECT * FROM mytable WHERE Feld1 = :param1 UND Feld2 = :param2";
$dies->_db->fetchAll($sql,array("param1"=>$value1","param2"=>$Wert2));
Dies funktioniert gut für mich
InformationsquelleAutor Danuofr