phpbar.de logo

Mailinglisten-Archive

Re: [php] mysql_db_query
Archiv Mailingliste php_(at)_infosoc.uni-koeln.de

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [php] mysql_db_query



Hallo Tobias,
danke dafür, daß du alles so schön aufgelistet hast. Ich habe es kurz bevor
ich deine Mail empfangen habe geschafft. Für alle anderen liste ich hier den
gesamten Code auf.

<schnipp>

function newUser($user,$password) {
 // Globale Variablen
 global $mysql_host, $mysql_user, $mysql_password, $db_name,
$usertable_name;

 // Konnektieren zum Mysql-Server
 $mysql_id = mysql_connect($mysql_host, $mysql_user, $mysql_password);

 if($mysql_id==0) {
 echo mysql_errno.": ".mysql_error; }

 mysql_select_db($db_name);

 // Überprüfen, ob User schon besteht
 $select = mysql_db_query($db_name, "SELECT user FROM $usertable_name WHERE
user LIKE '$user'");
 $data = mysql_fetch_row($select);
 if($data[0]==$user) {
 echo "Der User ".$user." existiert schon.";
 } else {
 echo "Herzlich Willkommen ".$user."!";

 // Ertsellen eines neuen User-Profiles
 mysql_query("INSERT INTO $usertable_name (user,password) VALUES
('$user','$password')");
 }
 mysql_close($mysql_id);
}

<schnapp>

Gruß,
Rudolf Koch

Tobias Ratschiller wrote:


> > $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


--
** Durchgehend geöffnet: http://www.php-center.de **
Die PHP-Liste: mailto:php_(at)_infosoc.uni-koeln.de
http://infosoc.uni-koeln.de/mailman/listinfo/php


Home | Main Index | Thread Index

php::bar PHP Wiki   -   Listenarchive