Richtige Verwendung der DB
Richtige Verwendung der DB
Ich habe nun öfter hier gesehen, das einige Module so programmiert sind, das normale SQL-Statements genutzt werden, um ddie Verbindung zu Datenbank aufzubauen etc.
Soweit ich es aber sehen konnte gibt es ja da auch in Klassen geschachtelte Funktionen.
Kann hier jemand kurz einen Hinweis geben, wie man für ein Modul - sauber im Contenido-Style" ne Datenbank-Verbindung aufbaut, eine Abfrage erstellt und die Datenbankverbindung wieder schließt?
Ideal wäre auch ein Hinweis wo man sich über die verwendbaren DB-Funktionen informieren kann.
Den Umstand in einem Modul den Benutzernamen und Passwort der DB unterzubringen finde ich nicht sauber, und es gibt ja schließlich andere Möglichkeiten.
Soweit ich es aber sehen konnte gibt es ja da auch in Klassen geschachtelte Funktionen.
Kann hier jemand kurz einen Hinweis geben, wie man für ein Modul - sauber im Contenido-Style" ne Datenbank-Verbindung aufbaut, eine Abfrage erstellt und die Datenbankverbindung wieder schließt?
Ideal wäre auch ein Hinweis wo man sich über die verwendbaren DB-Funktionen informieren kann.
Den Umstand in einem Modul den Benutzernamen und Passwort der DB unterzubringen finde ich nicht sauber, und es gibt ja schließlich andere Möglichkeiten.
im Wesentlichen ist es wohl dieses hier:
Ein Blick die Module des Beispielmandanten empfiehlt sich zudem...
EDIT: hab das copyResult... mal mit aufgenommen
Code: Alles auswählen
$db = new DB_Contenido;
$query = "SELECT * FROM ".$cfg['tab']['tabelle']."";
$db->query($query):
$wieviel = $db->numRows();
while($db->next_record()){
echo $db->f("spaltenname");
//alternativ:
$arr = $db->copyResultToArray();
}
EDIT: hab das copyResult... mal mit aufgenommen
Zuletzt geändert von MichFress am Di 10. Jul 2007, 13:50, insgesamt 1-mal geändert.
"Es wird keine Handlung geben, keine Geschichte mit ihrer Versprechung auf einen Anfang und ihrer Hoffnung auf ein Ende." (Andrzej Stasiuk)
-
- Beiträge: 3626
- Registriert: Di 12. Okt 2004, 20:00
- Wohnort: Voerde (Niederrhein)
- Kontaktdaten:
Einfach geht das über das DB-Objekt, ungefähr so:
Ein Blick in die Datei "/conlib/db_mysql.inc" sollte die weiteren Möglichkeiten auszeigen.
EDIT: MichFress war schneller.
Code: Alles auswählen
// Wenn kein DB-Objekt zur Verfügung steht, ein neues erzeugen.
// Um den Aufbau der Verbindung muss man sich nicht gesondert
// kümmern.
if ( !is_object($db) ) {
$db = new DB_Contenido;
}
// SQL Abfrage bauen
$sql = "SELECT * FROM ".$cfg["tab"]["cat"]." WHERE 1 = 1";
// SQL-Abfrage ausführen
$db->query($sql);
// Ergebnisse der Abfrage durchlaufen
while ($db->next_record()) {
// Jeweils die idcat ausgeben.
echo $db->f('idcat');
}
EDIT: MichFress war schneller.
Zuletzt geändert von Dodger77 am Mi 11. Jul 2007, 09:40, insgesamt 1-mal geändert.
Hab mal unter conlib in die mysql.inc reingeschaut, aber ich hab keine möglichkeit gefunden, das Ergebnis als array oder kompletten result zurückzugeben.
Ich nutze bei normalen SQL-Kommandos gerne
Ich nutze bei normalen SQL-Kommandos gerne
Code: Alles auswählen
while($row =mysql_fetch_array_result)
{
echo $row['titel']."-".$row['text'];
}
Danke für den Tipp,
aber gibts da nicht einen Ersatz für:
Wenn ich nämlich $db->$db->copyResultToArray() nutze, muss ich ja immer ne foreach-schleife proggen, und das ist ja umständlicher, als der normale mysql_fetch_array()-Befehl.
Ich finde es fehlt in der DB-Klasse ne funktion, die den kompletten query-Result zurückgibt, damit man AUCH mysql-standartfunktionen wie mysql_fetch_array, mysql_fetch_object etc. nutzen kann.
Was haltet Ihr davon?
Würde ja schon reichen, wenn $db->query anstatt die Query_ID den Result zurückgibt.
Um beides zu haben könnte man ja eine optionale Parameterübergabe machen, dass wenn der 2. Parameter bei $db->query() 1 ist, dass dann anstatt die Query_ID der Result zurückgegeben wird, oder?
aber gibts da nicht einen Ersatz für:
Code: Alles auswählen
while($row= mysql_fetch_array($result))
{
echo $row[0].$row[1];
}
Ich finde es fehlt in der DB-Klasse ne funktion, die den kompletten query-Result zurückgibt, damit man AUCH mysql-standartfunktionen wie mysql_fetch_array, mysql_fetch_object etc. nutzen kann.
Was haltet Ihr davon?
Würde ja schon reichen, wenn $db->query anstatt die Query_ID den Result zurückgibt.
Um beides zu haben könnte man ja eine optionale Parameterübergabe machen, dass wenn der 2. Parameter bei $db->query() 1 ist, dass dann anstatt die Query_ID der Result zurückgegeben wird, oder?
Hab selbst ne Lösung gefunden... der Result wird über die Funktion query_id() zurückgegeben.
Damit geht das nutzen normaler mysql-funktionen z.B. so:
Damit geht das nutzen normaler mysql-funktionen z.B. so:
Code: Alles auswählen
$db->query($sql);
while($row = mysql_fetch_array($db->query_id()))
{
print_r($row);
}
-
- Beiträge: 3626
- Registriert: Di 12. Okt 2004, 20:00
- Wohnort: Voerde (Niederrhein)
- Kontaktdaten:
Folgendes macht doch in etwa das Gleiche:
Code: Alles auswählen
while ($db->next_record()) {
print_r($db->Record);
}
Kommando zurück! Ist doch nicht was ich brauche.
Wobei gerade als ich es jetzt anwenden möchte, sehe ich dass es nicht das gleiche ist.
Bei meinem Beispiel oben kann ich innerhalb der While-Schleife direkt auf $row[0] oder $row['titel'] zugreifen.
Dein Beispiel oben gibt den NUR gesamten Array aus, dort kann ich nicht auf die einzelnen Schlüssel zugreifen.
Sinn und zweck ist ja, das solange mysql_fetch_array daten bekommt die Schleife ausgeführt wird, und auf die Inhalte von $row DIREKT zugegriffen werden kann.
PS: den Error den ich beschrieben habe für den Backendbereich resultiert daraus, das die übergebene ID fehlt also scheint meine Lösung vorab doch die praktikabelste zu sein...
Wobei gerade als ich es jetzt anwenden möchte, sehe ich dass es nicht das gleiche ist.
Bei meinem Beispiel oben kann ich innerhalb der While-Schleife direkt auf $row[0] oder $row['titel'] zugreifen.
Dein Beispiel oben gibt den NUR gesamten Array aus, dort kann ich nicht auf die einzelnen Schlüssel zugreifen.
Sinn und zweck ist ja, das solange mysql_fetch_array daten bekommt die Schleife ausgeführt wird, und auf die Inhalte von $row DIREKT zugegriffen werden kann.
PS: den Error den ich beschrieben habe für den Backendbereich resultiert daraus, das die übergebene ID fehlt also scheint meine Lösung vorab doch die praktikabelste zu sein...
ähm, dann schreib den code doch etwas um so das es funktioniert...rethus hat geschrieben:Bei meinem Beispiel oben kann ich innerhalb der While-Schleife direkt auf $row[0] oder $row['titel'] zugreifen.
Dein Beispiel oben gibt den NUR gesamten Array aus, dort kann ich nicht auf die einzelnen Schlüssel zugreifen.
Code: Alles auswählen
while ($db->next_record()) {
$row = $db->Record;
echo $row[0];
}
*** make your own tools (wishlist :: thx)
-
- Beiträge: 3626
- Registriert: Di 12. Okt 2004, 20:00
- Wohnort: Voerde (Niederrhein)
- Kontaktdaten:
Klar, kann man da direkt drauf zugreifen. Wenn du das Array mit print_r() ausgeben lassen kannst, dann kannst du auch drauf zugreifen, z.B.:
Code: Alles auswählen
// SQL-Abfrage ausführen
$db->query($sql);
// Ergebnisse der Abfrage durchlaufen
while ($db->next_record()) {
// per Index auf die Ergebnisse zugreifen
echo $db->Record[0] . " " . $db->Record[1];
// per Feldtitel auf die Ergebnisse zugreifen
echo $db->Record['feld1'] . " " . $db->Record['feld2'];
}
Kann mir jemand einen kurzen Tipp geben, wie ich eine andere Datenbank über die Contenido-Funktion - beispielsweise als "$db1" ansprechen kann?
ich dachte da an:
ich dachte da an:
Aber wo sage ich Ihm, welche Datenbank er nehmen soll?if ( !is_object($db1) ) {
$db1 = new DB_Contenido;
}
Could I help you... you can help me... buy me a coffee ☕. (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )
xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung
Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType
xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung
Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType