SQL Fehlermeldung durch ein Core Klasse beim ausgeben der Artikelliste im Bestellvorgang

Hallo und guten morgen,

ich muss für unser Modul eine Artikelliste zusammenstellen mit Werten die erst zur Verfügung stehen wenn ein Order eingetragen wurde. Das funktioniert auch ganz gut, nur bekomme ich, wenn ich mir mit folgendem Code,


$this->_order->getOrderArticles()->getList()->getArray();

die Artikel zur OrderId, im Debugmodus ausgeben lassen will um zu prfüen wo welche Werte stehen, folgende SQL Fehlermeldung geworfen.


2013-04-16 08:30:39exception 'ADODB_Exception' with message 'mysql error: [1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from' at line 1] in EXECUTE("select .`oxid` from ")
' in D:\Entwicklung\PHP\mycompany-oxidshop	runk\core\adodblite\adodb-exceptions.inc.php:84
Stack trace:
#0 D:\Entwicklung\PHP\mycompany-oxidshop	runk\core\adodblite\adodbSQL_drivers\mysql\mysql_driver.inc(369): adodb_throw('mysql', 'EXECUTE', 1064, 'You have an err...', 'select .`oxid` ...', false, Object(object_ADOConnection))
#1 D:\Entwicklung\PHP\mycompany-oxidshop	runk\core\adodblite\adodb.inc.php(316): mysql_driver_ADOConnection->do_query('select .`oxid` ...', -1, -1, false)
#2 D:\Entwicklung\PHP\mycompany-oxidshop	runk\core\oxlegacydb.php(147): ADOConnection->Execute('select .`oxid` ...', false)
#3 D:\Entwicklung\PHP\mycompany-oxidshop	runk\core\oxlist.php(393): oxLegacyDb->select('select .`oxid` ...')
#4 D:\Entwicklung\PHP\mycompany-oxidshop	runk\core\oxlist.php(492): oxList->selectString('select .`oxid` ...')
#5 D:\Entwicklung\PHP\mycompany-oxidshop	runk\modules\mycompany\core\mycompanySaleData.php(67): oxList->getList()
#6 D:\Entwicklung\PHP\mycompany-oxidshop	runk\modules\mycompany\controllers\mycompanyOrder.php(188): mycompanySaleData->__construct(Object(oxUser), 42, '60.0000', Object(mycompanyOrderModel), 2, Object(oxBasket))
#7 D:\Entwicklung\PHP\mycompany-oxidshop	runk\modules\mycompany\controllers\mycompanyOrder.php(104): mycompanyOrder->_mycompanySaleData(42, '60.0000', Object(mycompanyOrderModel), 2, Object(oxBasket))
#8 D:\Entwicklung\PHP\mycompany-oxidshop	runk\core\oxview.php(541): mycompanyOrder->execute()
#9 D:\Entwicklung\PHP\mycompany-oxidshop	runk\core\oxshopcontrol.php(390): oxView->executeFunction('execute')
#10 D:\Entwicklung\PHP\mycompany-oxidshop	runk\core\oxshopcontrol.php(156): oxShopControl->_process('order', 'execute', NULL, NULL)
#11 D:\Entwicklung\PHP\mycompany-oxidshop	runk\core\oxid.php(40): oxShopControl->start()
#12 D:\Entwicklung\PHP\mycompany-oxidshop	runk\index.php(28): Oxid::run()
#13 {main}

Kann mir vieleicht jemand einen Tipp geben was da falsch läuft? Vielen Dank udn Gruß Daniel

Hmm da fehlt irgendwie die Tabelle im Statement, kannst du mal schauen woher er den Namen nimmt der dort eingesetzt wird?

Hallo Daniel,

wie in der Fehlermeldung bereits steht, gibt es einen Fehler bei dem SQL-Statement:

select .`oxid` from 

Hier fehlt anscheinend in deinem SQL-Statement entweder der viewName von oxorders oder die Property “sCoreTable” (ich glaube die hieß so)…
Führst du den Query selber aus oder wird dieser durch getArray() oder getList() ausgeführt?

Vielleicht findest du den Fehler ja nun schon selbst, ansonsten freue ich mich noch auf ein paar Zeilen von dir :slight_smile:

Hallo,

also der Query wird von getList() in der Kleasse oxlist aus dem Core ausgeführt.

Da steht folgendes.


$sQ = "select $sFieldList from " . $oListObject->getViewName();

Das heist $oListObject->getViewName() muss leer sein an diesem Punkt. Das Problem dabei ist, dass ich da mit XDebug leider keine Chance habe das zu prüfen, denn durch den SQL Fehler geht XDebug im Code nicht weiter, beziehungsweise bricht ab. Eine View mit dem Namen oxv_oxselectlist gibt es in der Datenbank, aber ob das die richtige ist weiß ich nicht, ich weiß nicht welche View Table da erwartet wird.

Gruß Daniel

Der Fehler ist vor dem “from”, getViewName() ist deshalb nicht der richtige Ansprechpartner, eher $sFileList. Dort drin fehlt die Tabelle.

Du hast:
select .oxid from

Du brauchst z.B.:
select oxarticles.oxid from

Kann bzw. muss ich den Tabellennamen manuel setzen? Ich konnte diebezüglich nichts finden oder habe es übersehen.

Wozu brauchst du ->getList()->getArray(); ?
$this->_order->getOrderArticles() reicht doch.

Wie leofonic bereits geschrieben hat, reicht es eigentlich auch aus, nur getOrderArticles() aufzurufen, da dessen Rückgabewert so oder so iterierbar ist.