Anfänger mit mysql_num_rows und boolean given?

Benny1

Grünschnabel
Hallo,

Das Script soll aus der Datenbank IP-Adressen auslesen und nachsehen, ob eine bestimmte IP-Adresse bereits 3 Einträge am heutigen Tag hat. Falls ja, soll das Script mit die('fehler'); abbrechen.

Doch ich erhalte folgende Fehlermeldung:
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in

Programmcode:
PHP:
$block = mysql_query("SELECT * FROM `ip-adressen` WHERE IP='$UserIP' AND Datum='$DatumfuerDatenbank'");

if (mysql_num_rows($block) > 3)
{
	die('Maximale Anzahl der Emails pro Tag überschritten! (Spamschutz)');
}

Sorry, bin Anfänger!
 
Hi,

macht ja nix, jeder fängt mal an ;)

Als erstes kannst du dir gleich mal angewöhnen, die Fehlerbehandlung konsequent einzubauen:

PHP:
$block = mysql_query("SELECT * FROM `ip-adressen` WHERE IP='$UserIP' AND Datum='$DatumfuerDatenbank'") or die(mysql_error());

if (mysql_num_rows($block) > 3)
{
    die('Maximale Anzahl der Emails pro Tag überschritten! (Spamschutz)');
}

Wie du siehst, habe ich hinter mysql_query() dieses "or die(mysql_error());" eingebaut. Das zeigt dir im Fehlerfalle, was schief gelaufen ist. mysql_error() liefert den Fehler in einem Format zurück, was man lesen kann. Es gibt noch mysql_errno() das liefert aber nur die Fehlernummer.

Anscheinend ist dein SQL-Statement fehlerhaft. mysql_error() wird dir den Grund nennen.

Im Fehlerfalle liefert mysql_query() nämlich "false" zurück, was ein boolscher (boolean) Wert ist. Der würde in $block gespeichert und anschließend an mysql_num_rows() übergeben werden. mysql_num_rows() will aber keinen boolean Wert haben sondern das Ergebnis einer Abfrage (resource).
 
Da die diese Art von Fragen sehr oft kommt, habe ich mal ein Tutorial geschrieben wie man am besten auf Fehlersuche geht.
PHP MySQL Debug Queries
Geh es doch mal durch und falls du die Lösung nicht findest, poste mal das ausgegebe SQL-Statement ins Forum.

Wahrscheinlich liegt es an Datum='$DatumfuerDatenbank'
 
Zurück