fastix®: "mysql_num_rows"-Warning

Beitrag lesen

Moin!

$sql='SELECT id FROM benutzer WHERE Email LIKE "'.mysql_real_escape_string($emailInput, $verbindung).'"';  
$result = mysql_query($sql, $verbindung) or die (mysql_error($verbindung)."<pre>".$sql);  
  
if(0==mysql_num_rows($result)) {  
   echo "Benutzer kann mit dieser Email-Adresse angelegt werden.";  
}

Noch besser:

$sql='SELECT COUNT(`id`) FROM `benutzer` WHERE `Email` LIKE "'.mysql_real_escape_string($emailInput, $verbindung).'"';  
$result = mysql_query($sql, $verbindung) or die (mysql_error($verbindung)."<pre>".$sql);  
  
$row=mysql_fetch_array($result, MYSQL_NUM);  
if(0==$row[0]) {  
   echo "Benutzer kann mit dieser Email-Adresse angelegt werden.";  
}

1.)
Der Hinweis, dass mysql_num_rows() eine Ergebnisset und keinen booleanschen Wert erwartet zeigt, dass ein solcher in $abfrage steht. Hier kommt nur "false" in Betracht - und false enthält dieser Wert nur, wenn die Abfrage zu einem Fehler führte. Prüfe also die tatsächlich übergebene Abfrage.

2.)
$abfrage enthält ein Ergebnis. Du benennst Dein Zeug verwirrend, also falsch.

3.)
Trenne den Aufbau der Abfrage und deren Ausführung, damit Du im Fehlerfall die gesamte Abfrage ausgeben kannst.

4.)
Was soll eigentlich das LIKE? LIKE wird verwendet, wenn der zu vergleichende Wert Platzhalter verwendet. Wolltest Du vielleicht:

  
$sql='SELECT COUNT(`id`) FROM `benutzer` WHERE `Email` = "'.mysql_real_escape_string($emailInput, $verbindung).'"';

5.)
Wenn Du auf die Spalte email einen Unique-Index setzt, dann kannst Du direkt beim Eintrag prüfen, ob das funktioniert hat. Die Funktion mysql-errno($verbindung) gibt, wenn die Adresse bereits existiert, 1062 zurück.

MFFG (Mit freundlich- friedfertigem Grinsen)

fastix