2009-08-13 5 views
2

Ich habe ein Problem mit einer Abfrage, die in phpmyadmin funktioniert, aber nicht mit Zend_db. Sie können in SQL statement with several joinsZend_Db Query Mysqli Fehler vorbereiten: Operand sollte 1 Spalte (n) enthalten

über die Abfrage las ich diese Tabellen haben

Post 
    ID 
    entry 
Category 
    ID 
    name 
CategoryBinding 
    ID 
    postID 
    categoryID 

Und das ist mein PHP-Code:

class Blog_Model_DbTable_Posts extends Zend_Db_Table 
    { 
     protected $_name = 'Posts'; 
    public function getByCategoryId($id) 
    { 
      $query = 
    "SELECT * 
FROM `Post` AS `p` 
LEFT JOIN `CategoryBinding` AS `cb` ON p.ID = cb.postID 
LEFT JOIN `Category` AS `c` ON cb.categoryID = c.ID 
INNER JOIN `Post` AS `p2` ON p.id = p2.id 
WHERE p.id in 
(
    SELECT p2.id 
     FROM `Post` as `p2` 
     LEFT JOIN `CategoryBinding` AS `cb` ON p2.ID = cb.postID 
     LEFT JOIN `Category` AS `c` ON cb.categoryID = c.ID 
     WHERE c.id = 1 
    ) 
    " 
return parent::fetchAll($query); 

Ich habe versucht, diese Abfrage mit boath die PDO-Adopter zu laufen und mit mysqli Adopter. Ich bekomme diesen Fehler mit dem mysqli Adopter.

Mysqli prepare error: Operand should contain 1 column(s) 

Ich habe darüber gegoogelt und herausgefunden, dass es vielleicht ein Fehler in Zend_Db ist, aber da meine SQL-Kenntnisse etwas eingeschränkt ist, ich weiß nicht, ob ich etwas falsch tue, oder wenn es in der Tat ein Fehler ist. Kannst du mir bitte helfen, das herauszufinden? Tank Sie.

+0

Welche Version von Zend verwenden Sie? Eine schnelle Suche zeigt, dass ein Fehler, der verwandt sein könnte, existiert in 1.5 - 1.8 http://framework.zend.com/issues/browse/ZF-3311 – Brandon

+0

Ich benutze 1.9 (die neueste Version) – unkownt

Antwort

4

Statt

parent::fetchAll($query); 

Verwenden

$this->getAdapter()->fetchAll($query); 
+1

Richtig. Die Methode 'fetchAll()' der Tabelle unterscheidet sich von der Methode 'fetchAll()' des Adapters. Letzterer nimmt eine vollständige SQL-Anweisung. Ersteres verwendet entweder einen SQL-Ausdruck zur Verwendung in einer 'WHERE'-Klausel oder ein Objekt vom Typ Zend_Db_Table_Select. –

+0

Danke, ich glaube nicht, dass ich das jemals ohne deine Hilfe lösen konnte. – unkownt

Verwandte Themen