Kurze Codeerklärung
Janosch
- php
Hallo
Ich sehe mir gerade ein wenig den PHP Code meines WBB an und bin dabei auf das gestoßen:
$result = $db->query("SELECT profilefieldid, required FROM bb".$n."_profilefields ORDER BY profilefieldid ASC");
Ich verstehe nicht, was $db->query heißt, also was macht PHP da?
PS: der Code im WBB ist schrecklich unübersichtlich :)
Danke für eure Hilfe, der Janosch
Moin Moin !
$result = $db->query("SELECT profilefieldid, required FROM bb".$n."_profilefields ORDER BY profilefieldid ASC");
Ich verstehe nicht, was $db->query heißt, also was macht PHP da?
Das steht mit hoher Wahrscheinlichkeit detailiert unter http://www.php.net/.
$db ist ein Objekt (wahrscheinlich ein Datenbank-Objekt), query ist eine Methode dieses Objekts, und der Rest ist ein Sting, der der Methode als Parameter übergeben wird. Dieser String ist, je nach Wert von $n, ein gültiges SQL-Statement, daß zwei Spalten aus einer bestimmten Tabelle ausliest und absteigend nach den Werten des ersten Feldes sortiert.
Alexander
Objekt, Methode ?
Naja, macht das Sinn die Abfrage so umständlich zu übergeben? wäre es nicht einfacher gleich mit mysql_query zu arbeiten?
Hallo Janosch,
Naja, macht das Sinn die Abfrage so umständlich zu übergeben?
Kommt darauf an, denn...:
wäre es nicht einfacher gleich mit mysql_query zu arbeiten?
Wenn Du unterschiedliche Datenbanken unterstützen willst, dann müsstest Du Code dreifach und vierfach schreiben, damit das klappt. So kannst Du - zumindest für einfache SQL-Statements - den gleichen Code verwenden.
Viele Grüße,
Christian
Moin Moin !
Objekt, Methode ?
Naja, macht das Sinn die Abfrage so umständlich zu übergeben? wäre es nicht einfacher gleich mit mysql_query zu arbeiten?
Wenn Du Dein ganzes Leben lang nur mit einer Datenbank arbeiten willst: Ja.
Aber stell Dir mal vor, es gäbe eine magische Blackbox (so ähnlich wie IBMs "Business Adapter"), derem eines Ende Du auf jede beliebige Datenbank stecken kannst, und an deren anderem Ende alle Datenbanken exakt gleich aussehen.
Geil, oder?
Nun, PHP hat sowas in Ansätzen, Perl hat mit dem DBI sowas schon richtig gut, wenn auch die SQL-Dialekt-Unterschiede noch nicht ausgeglichen werden. ODBC ist ähnlich, aber in Sachen Performance leider unter aller Sau.
Warum mit OOP? Naja, auch ganz einfach: Für jede DB brauchst Du für die "Black Box" sowas wie connect, disconnect, und ein paar andere sehr DB-spezifische Funktionen. Und damit auf der Programmseite der "Black Box" alle DBs gleich aussehen, braucht Du noch einige Funktionen, die für alle oder zumindest viele Datenbanken identisch sind. Sowas mehrfach zu coden ist schlicht Unfug, wenn einem Vererbung zur Verfügung steht. Du baust einen Universaladapter, der mit keiner DB zurechtkommt (Basisklasse), und davon leitest Du einen DB-spezifischen Adapter ab, den Du mit DB-spezifischen Methoden erweiterst.
Ich programmiere seit etwa drei Jahren mit dem DBI und einem eigenen Dialekt-anpassendem Layer oberhalb von DBI. Mein Projekt lief ursprünglich nur auf Oracle, schnell sollte aus Kostengründen auch der MSSQL unterstützt werden. Kein Problem, nur an der Dialekt-Anpassung war einiges zu tun. Irgendwann habe ich dann gesagt: "Wenn es billig sein soll, warum dann MSSQL und nicht PostgreSQL?". Man nehme: Den vorhandenen Code, einige kleinere Änderungen an der Dialekt-Anpassung (in Sachen Dialekt sind Pg und Oracle recht ähnlich, was meine Anforderungen angeht), und schon läuft mein Programm mit drei Datenbanken von "umsonst und gut" über "billig und Schrott" bis "teuer und gut".
Alexander
Phu, danke für soviel Aufmerksamkeit :)
Damit ich das also richtig verstanden habe:
Das Query wird der Methode 'query()' übergeben.
Wenn ich jetzt eine andere Datenbank verwenden will, ersetze ich in der Methode einfach die Teile im Query, die nicht passen, und fertig?
hi,
Wenn ich jetzt eine andere Datenbank verwenden will, ersetze ich in der Methode einfach die Teile im Query, die nicht passen, und fertig?
nein, dann leitest du dein objekt $db einfach von einer anderen klasse ab, die auf diese datenbank zugeschnitten ist, und die ebenfalls die methode query() unterstützt.
das heisst, in deinem eigentlichen code musst du gar nichts mehr verändern, bis auf die stelle, an der das objekt $db erzeugt wird.
gruss,
wahsaga