phpbar.de logo

Mailinglisten-Archive

[php] mysql_db_query

[php] mysql_db_query

Tobias Ratschiller tobias_(at)_dnet.it
Sat, 26 Jun 1999 19:13:58 +0200


> > $id = mysql_db_query($db_name,"SELECT user FROM $usertable WHERE
> > user=$user");
> > if ($id=0) {
> > echo "Bitte wählen sie einen anderen Benutzernamen.";
> > } else {
> > newUser($user); }
>
> Ich habe vor ein paar Tagen ein ähnliche Probblem gehabt.
> Versuchs mal mit
> if ($id == true) {

Zwei Fehler:

1) mysql_db_query(), mysql_query() und mysql() geben einen *Zeiger*
auf das Resultat der Abfrage zurück, nicht das Resultat selbst.
Schlägt die Abfrage aufgrund eines Syntax-Fehlers in der SQL-Syntax
oder anderer Probleme (sollte MySQLd plötzlich gestorben sein, zum
Beispiel) fehl, liefern diese Funktionen den Booleschen Wert false
zurück (bzw. 0). Ansonsten geben sie irgendeine Zahl zurück, die in
der Praxis unbedeutend ist. Das Resultat holt man dann mit Funktionen
wie mysql_fetch_array().

2) Strings müssen in der SQL-Query natürlich in Anführungszeichen
stehen:
WHERE USER = '$user'

Fazit:
Der Code sollte so aussehen:
$id = mysql_db_query($db_name, "SELECT user FROM $usertable WHERE
user='$user'") or die(mysql_error()); // [1]
if (mysql_num_rows($id) != 0) { // [2]
   echo "Bitte wählen sie einen anderen Benutzernamen.";
} else {
  newUser($user);
}

[1] Die Verknüpfung mit dem logischen OR ist eine nützliche Funktion
zur Fehlerbehandlung. Da eine logische OR-Verknüpfung selbst dann den
Wert "wahr" ergibt, wenn nur ein Teil der Verknüpfung wahr ist, wird
der zweite Teil der Verknüpfung (das die(mysql_error())) nur dann
ausgewertet, wenn der erste Teil den Wert "falsch" ergeben hat - also
ein Fehler bei der SQL-Query aufgetreten ist.
Liefert eine Funktion False im Falle eines Fehlers, sollte man das
auch überprüfen.
[2] mysql_num_rows() liefert die Anzahl der zurückgelieferten Zeilen.

Mit freundlichen Grüßen,
  Tobias Ratschiller



php::bar PHP Wiki   -   Listenarchive