Zum Inhalt springen

DBAL in Typo3 v4

Erstellt am 10. Mai 2006 · 1 Antwort · letzte Antwort am 10. Mai 2006

Tags: Datenbank, Frage

basti79 ·

Hallo Allerseits.

Ich habs nochmal mit der 4.0 final probiert, diesmal viel erfolgreicher. Nur die DBAL scheint zu spinnen.

Sehe ich das richtig, dass DBAL in 4.0 fest integriert ist, und nicht installiert werden braucht?

Doch zum eigentlichen Problem: tt_products sieht seit neuestem so aus:

Warning: Invalid argument supplied for foreach() in /var/www/dummy-4.0/typo3conf/ext/dbal/class.ux_t3lib_db.php on line 970

Diese Zeile wird mehrfach wiederholt, danach wird bemängelt, dass keine Header mehr gesendet werden können.

Dies hängt ursächlich anscheinend damit zusammen, dass der DB ein ungültiges Query gegeben wird. Eine selbstentworfene Extension, die die DBAL verwendet hat (konkret: SELECTquery) hat nach dem Upgrade nicht mehr funktioniert, da die FROM-Klausel nicht übernommen wurde und im Query einfach leer blieb.

Das Problem tritt anscheinend nur bei Vollmond auf, ich habe mit google einige Seiten gefunden, die diesen Fehler haben, und auch einen Post hier, der Neuinstallation vorschlug. Neuinstallation ist jedoch keine Fehlerbehebung.

basti79 ·

Nach der Debugging-session:

in typo3conf/ext/dbal/class.ux_t3lib_db.php eingefügt:

if (!is_array($where_clause))
   var_dump($where_clause);

ergibt

string(143) "SQL engine parse ERROR: No operator, but parsing not finished in parseWhereClause().: near "> 0) AND tt_products.deleted=0 AND tt_products.hid""

Die Lösung liegt offensichtlich darin, dass der SQL-Parser "<>" als synonym für "!=" nicht kennt:

// class.tx_ttproducts_list_view.php, Nahe Zeile 146
            $wherestock = ($this->conf['showNotinStock'] ? '' : 'AND (inStock !\
= 0) ');

Der zweite Fehler hat ein ähnliches Problem: "*" wird in der tables-extension zu einer Feldliste aufgeblasen, der jedoch das "as" fehlt. Lösung hier:

// class.tx_table_db.php , Zeile 340
$rcArray[] = $this->aliasArray[$table].'.'.$field.' as '.$this->columnPrefix.$productsfield;
// Zeile 351
$rcArray[] = key($this->tableFieldArray[$field]).'.'.$field.' as '.$this->columnPrefix.current($this->tableFieldArray[$field]);

-> tt_news läuft mit typo3 v4 ohne Mucken

Am Rande: wenn man schon SQL parsed, dann macht man das gefälligst mit einem YACC-Äquivalent und frickelt sich nicht selber irgendwelches Zeug hin!

Wäre Froh, wenn ein Dev die Patches in die Versionskontrolle aufnehmen würde.