Datenbankabfrage Oxid-Konform

Hallo liebe Community,

wie werden in Oxid Datenbankabfragen ausgeführt? Ich habe bisher nichts darüber gefunden und es einfach mal wie folgt versucht, jedoch ist mir klar das es so nicht ideal ist:


$dbHost = $this->getConfig()->getConfigParam( 'dbHost' );
$dbName = $this->getConfig()->getConfigParam( 'dbName' );       
$dbUser = $this->getConfig()->getConfigParam( 'dbUser' );       
$dbPwd  = $this->getConfig()->getConfigParam( 'dbPwd' );        
$dbType = $this->getConfig()->getConfigParam( 'dbType' );        

if ( $dbType === 'mysql' ) 
{
	$dbHandle = mysql_connect($dbHost, $dbUser, $dbPwd);
	mysql_select_db($dbName, $dbHandle);
	$sQuery = "UPDATE oxorder SET OXORDERNR = '".$new_orderid."' WHERE OXID = '".$oOrder->oxorder__oxid->value."'";
	mysql_query($sQuery, $dbHandle);
	mysql_close($dbHandle);
}

Vielen Dank für die Zeit und Bemühungen zu helfen.

Einen schönen Abend wünsche ich allen


$sQuery = "UPDATE oxorder SET OXORDERNR = '".$new_orderid."' WHERE OXID = '".$oOrder->oxorder__oxid->value."'";
$sSql=oxDb::getDb()->Execute($sQuery);

Vielen Dank Markus, genau das habe ich gesucht :slight_smile:

Oxid nutzt Adodb, daher musst Du Dich um Verbindungsaufbau etc. nicht kümmern!

Trotz AdoDB wird nach wie vor die gewohnte SQL-Syntax verwendet, oder gibt es dort etwas zu beachten?

Eine weitere Frage habe ich nun noch, der Query oben führt nur ein Update durch ohne eine Ergebniss zu erhalten. Möchte ich nun einen Select machen weiß ich nicht wie die Ergebnisse verarbeitet werden können. Gibt es nicht vielleicht ein Tutorial bzgl. Datenbankoperation oder kann jemand kurz einen Beispiel-Code posten.

Ich möchte einen einfachen “SELECT * FROM table” und anschließend alle gelieferten Ergebnisse sammeln und verarbeiten. Oder hat jemand einen Hinweis wo ich solchen Code finden kann.

Vielen Dank für die Zeit und Bemühungen.

Einen schönen Abend wünsche ich allen

[QUOTE=Shootie;15144]Trotz AdoDB wird nach wie vor die gewohnte SQL-Syntax verwendet, oder gibt es dort etwas zu beachten?
[/quote]
AdoDb ist eine DB-Abstraktionsebene.
Dadurch kannst Du mit den gleichen Befehlen auf verschiedene DBMS`s arbeiten ohne die DBMS-Spezifischen PHP-Befehle zu benutzen oder zu kennen.
Der Vorteil ist weiterhin, wenn man nur ‘einfaches’ SQL benutzt kann man so eine Aplikation schreiben ohne von einen DB-Hersteller (zB. MySQL) abhängig zu sein.

Eine weitere Frage habe ich nun noch, der Query oben führt nur ein Update durch ohne eine Ergebniss zu erhalten. Möchte ich nun einen Select machen weiß ich nicht wie die Ergebnisse verarbeitet werden können. Gibt es nicht vielleicht ein Tutorial bzgl. Datenbankoperation oder kann jemand kurz einen Beispiel-Code posten. …

oxdb::getDb() übergibt Dir ein adodb Object (Zeile 203).

… und AdoDb ist auch recht gut dokumentiert. Tutorials gibt es genug ;).
Dank OXID brauchst Du Dich nicht mal um die Verbindung zu kümmern.

… ein AdoDB Kommando hast Du ja schon benutzt…
http://phplens.com/lens/adodb/docs-adodb.htm#execute

Vielen Dank Markus, das ich eine AdoDB-Objekt als Antwort von oxdb::getDb() erhalte habe ich garnicht wahrgenommen. Meine erste Frage bzgl. ob es was zu beachten gibt bzgl. der SQL-Syntax für AdoDB zielte genau auf deine Antwort ab, für simple SQL-Abfragen ist soeine Abstraktion wunderbar, allerdings stößt die auch mal an Ihre Grenzen.

Kurz noch eine Frage diesbzgl.: Ich bin durch Zufall irgendwo im Core von Oxid auf etwas Code gestossen (oxDB-Klasse wo die DB-Zugangsdaten aus der Config geladen werden und als Globale Variablen zur späteren Verwendung/Verbindungsinitializierung definiert werden) und dort wurde der Datenbank-Typ im Code hard-codet auf MySQL festgesetzt. Daher meine Frage ob Oxid momentan nur mit MySQL-Datenbank zusammenarbeitet, bzw. gibt es Möglichkeiten oder Modifikationen von Oxid um den Shop z.b. auf einer PostgreSQL Datenbank laufen zu lassen?

Danke nochmal für den Hinweis das wir es mit AdoDB zu tun haben, ich habe erst jetzt das gecheckt und mich bei AboDB informiert. Vielen Dank, ich konnte somit mein Ziel erreichen, falls es jemanden interssiert poste ich nochmal meinen Code der jetzt sauber funktioniert:


    protected function checker($id)
    {
      $sQuery = "SELECT * FROM table WHERE id = '".$id."'";
      $oResult = oxDb::getDb()->Execute($sQuery);
        if($oResult->RecordCount()>0)
        {
            return $this->checker($id + 1);
        }
        else 
        {
            $sQuery = "INSERT INTO table (id) VALUES ('".$id."')";
            oxDb::getDb()->Execute($sQuery);
            return $id;
        }

Eine angenehme Nachtruhe wünsche ich noch allen aktiven hier

[QUOTE=Shootie;15158]Meine erste Frage bzgl. ob es was zu beachten gibt bzgl. der SQL-Syntax für AdoDB zielte genau auf deine Antwort ab, für simple SQL-Abfragen ist soeine Abstraktion wunderbar, allerdings stößt die auch mal an Ihre Grenzen.
[/quote]
Nein, diese Abstraktion ist bis auf Perfomanceeinbußen immer wunderbar.
Man braucht halt nur einen PHP-Befehlssatz zu lernen um mit allen möglichen RDMS`s zu kommunizieren.
Du kannst mit AdoDB oder PEAR-DB genau so komplexe Querys abschicken wie mit den normalen PHP-Befehlen.
Nur leider sind die verschiedenen SQL-Dialekte halt nicht wirklich kompatibel und der große Nutzen ist erst dann da, wenn die Abfragen auf allen (oder wenigstens den wichtigsten) DBMS funktionieren.

Weiterhin währe ein Update zB. auf Mysqli sehr einfach, da es sich ja weiterhin um MySql handelt und die Querys nicht angepasst werden müssen.
An einer zentralen Stelle den Verbindungsstring anpassen und ein wenig hoffen.

Das Datenbankmodell sollte IMHO über das Model des MVC abstrahiert werden.
Wenn das geschaft ist, dann bleiben (hoffentlich) nur noch einige wenige komplexe Abfragen (zB. Artikelsuche, Top5Article usw.) über.
Diese muss man dann wohl von Hand anpassen.

Die Probleme, die Du andeutest sind eher ähnlich wie die Unterschiede zwischen MySQL4 und MySQL5.

Ich denke, dass Deine andere Frage so auch ansatzweise beantwortet ist. :wink:

Mit Oxid 4.5 funktioniert eine Abfrage bei mir so nicht mehr. Folgendes kommt als Fehlermeldung:
<br /> <b>Fatal error</b>: Class ‘oxDb’ not found in <b>…/core/oxconfig.php</b> online
<b>478</b><br />

Was muss ich in der neuen Version anders machen?