ausgabe einer function für mysql select
der Flo(H)
- php
0 Vinzenz Mai0 dedlfix0 globe
Guten Abend zusammen!
Ich hab mir gerade eine function gebastelt, die mir die Daten aus meiner Datenbank holen soll. Leider habe ich bei der Ausgabe noch einige Probleme. Hier mal kurz die funktion:
function select_ordered ($table, $order){
db_connect ();
$query = "SELECT * FROM $table ORDER BY $order";
$rows = @mysql_query("$query");
if (mysql_error()){
return mysql_error();
}else{
$result = mysql_fetch_array($rows);
return $result;
}
}
Bei nur einem Datensatz habe ich keine Probleme. Habe schon versucht das Ergebnis innerhalb der Funktion in ein neues array zu schreiben und mir dann das ausgeben zu lassen, aber irgendwie hab ich bis jetzt noch keinen Weg gefunden mir das Ergebnis vernünftig ausgeben zu lassen.
Wär klasse wenn mir jemand weiterhelfen könnte.
Danke schonmal,
Flo
Hallo Flo,
Ich hab mir gerade eine function gebastelt, die mir die Daten aus meiner Datenbank holen soll. Leider habe ich bei der Ausgabe noch einige Probleme. Hier mal kurz die funktion:
function select_ordered ($table, $order){
db_connect ();
$query = "SELECT * FROM $table ORDER BY $order";
Nein, es ist keine gute Idee, _alle_ Spalten einer Tabelle auszulesen, erst recht nicht in der Kombination mit allen Datensätzen.
$rows = @mysql_query("$query");
Dazu sag' ich nichts. Halt doch:
Deiner Variablenbenennung zufolge glaubst Du, Du erhältst alle Zeilen zurück. In einem gewissen Sinne stimmt das auch. Du erhältst eine Ressource, die Dir den zeilenweisen Zugriff auf die Daten erlaubt.
if (mysql_error()){
return mysql_error();
}else{
$result = mysql_fetch_array($rows);
und hier solltest Du stattdessen mit einer Schleife Zeile für Zeile auslesen, wie es auch im Handbuch steht.
return $result;
}
}Bei nur einem Datensatz habe ich keine Probleme.
Äh ja, Du liest ja auch nur einen Datensatz aus :-)
Und berücksichtigst noch nicht einmal den Fall, dass eine Tabelle noch leer ist, dass also _keine_ Daten zurückgeliefert werden.
Nein, dann gibt es keinen mysql_error, das ist bei einer leeren Tabelle normal und richtig, wird aber von Dir nicht berücksichtigt.
Freundliche Grüße
Vinzenz
Schreib jetzt wieder alles in ein array und es klappt. Mein Problem war, dass ich mit der falschen Tabelle getestet habe und sowieso nur einen Datensatz in der Tabelle hatte - tja, da kann ich lange im code suchen.
Trotzdem danke für deine Hilfe
Nein, es ist keine gute Idee, _alle_ Spalten einer Tabelle auszulesen, erst recht nicht in der Kombination mit allen Datensätzen.
Naja, ich brauch ja auch alles bis auf den Primärschlüssel. Ich hab aber auch eine funktion die nur einzelne Spalten zurückgibt. Aber wenn du einen Vorschlag hast, wie ich das ganze noch dynamisch halten kann, ohne dass ich die Primärschlüsselspalte auslese, wär das mit sicherheit die bessere lösung.
Dazu sag' ich nichts. Halt doch:
Deiner Variablenbenennung zufolge glaubst Du, Du erhältst alle Zeilen zurück. In einem gewissen Sinne stimmt das auch. Du erhältst eine Ressource, die Dir den zeilenweisen Zugriff auf die Daten erlaubt.
normalerweise heißt die Veriable bei mir result, kann sie aber auch gerne in ressource umbenennen ;)
Äh ja, Du liest ja auch nur einen Datensatz aus :-)
Und berücksichtigst noch nicht einmal den Fall, dass eine Tabelle noch leer ist, dass also _keine_ Daten zurückgeliefert werden.
Ob die Tabellen gefüllt sind, überprüfe ich beim allerersten Aufruf der Datei und nach dem löschen. Ich wüsste nicht, warum ich dies jedesmal wenn ich einen Select mache wieder prüfen sollte.
Hallo Flo,
Ob die Tabellen gefüllt sind, überprüfe ich beim allerersten Aufruf der Datei und nach dem löschen. Ich wüsste nicht, warum ich dies jedesmal wenn ich einen Select mache wieder prüfen sollte.
wenn Du eine recht allgemein gehaltene Funktion schreibst, dann solltest Du Randbedingungen, die für das korrekte Funktionieren dieser Funktion erforderlich sind, dokumentieren. Noch viel schlimmer ist es, wenn unerwarteterweise Du genau an einen solchen Punkt gelangst. Daher ist es gerade bei Datenbank- oder Dateioperationen viel besser, wenn die Funktion selbst mit einem solchen Fehler zurechtkommt. Es könnte ja sein, dass Du Deine Funktion, die sich inzwischen bewährt hat, in einem anderen Projekt einsetzen willst und Dich nicht mehr an die Voraussetzungen Deiner Funktion erinnerst - und dann knallt es irgendwann, und zwar genau zum ungünstigsten Zeitpunkt.
Gerne gebe ich Dir noch einen Lesetipp aus dem Archiv, was Deinen Umgang mit der Datenbank betrifft: </archiv/2005/11/t118903/>.
Freundliche Grüße
Vinzenz
Ich habe zwar keine 5-20 Datenbankzugriffe pro Datei, aber in Hinblick auf die eventuelle Verwendung in anderen Projekten hast du wohl recht.
Danke für den Tipp!
echo $begrüßung;
Ich hab mir gerade eine function gebastelt, die mir die Daten aus meiner Datenbank holen soll.
Und wenn du eine umfangreiche Datenbank-Abstraktion nehmen möchtest, kannst du ja mal einen Blick auf PEARs DB werfen. (Auch wenn du das nicht nehmen möchtest lohnt sich ein Blick darauf.)
Außerdem gibts noch für PHP5 PDO - PHP Data Objects. .oO(müsste ich mir auch mal irgendwann genauer anschauen)
echo "$verabschiedung $name";
P.S. Es gibt auch noch weitere Datenbankabstraktionen für PHP, die ich aber alle nicht näher kenne.
n'abend,
P.S. Es gibt auch noch weitere Datenbankabstraktionen für PHP, die ich aber alle nicht näher kenne.
empfehlenswert ist ebenfalls ADODB ([Link:http://adodb.sf.net]) unterstützt weitaus mehr sprachen als nur php4/5...
adodb ist mehr als ein stupider db-abstraction-layer (im eigentlichen sinne)... es versucht deine queries noch zu optimieren, bevor es sie abschickt...
wenn das modul (für php) noch installiert ist, dürfte das ganze noch schneller gehen...
ich hab sehr positive erfahrungen mit adodb gemacht... anschauen lohnt sich..
weiterhin schönen abend...
Danke für eure Tips, werd mir das mal anschauen - auch wenn es wahrscheinlich erst fürs nächste Projekt ist :)