(MySQL) Überprüfen ob Abfrage Ergebnisse zurückgegeben hat
Paul Styrnol
- php
Hallo,
ich mache über PHP folgende Abfrage:
mysql_connect('localhost');
mysql_select_db("galerie");
$result = mysql_query("SELECT name, titel FROM album WHERE name = '" . $_POST["gname"] . "'");
while($row = mysql_fetch_array($result)) {
mach_was();
}
Nun ich will überprüfen, ob meine mir meine Abfrage überhaupt irgendwelche Ergebnisse liefert. Abzufragen ob $result FALSE ist bringt ja nichts.
Das alleine sagt jedoch überhaupt nichts über die Anzahl
veränderter oder gelieferter Datensätze aus.
(http://www.php.net/manual/de/function.mysql-query.php)
Laut der Funktionsbeschreibung von mysql_fetch_array müsste FALSE zurückgegeben werden wenn keine Datensätze vorhanden sind, also habe ich übeprüft ob $row["name"] bzw. $row["titel"] FALSE ist, komischerweise hat das nicht funktioniert.
Nach kurzer Recherche bin ich auf die Funktion mysql_num_rows() gestoßen, habe die Funktion innerhalb der Schleife wie folgt angewendet:
$anzahl = mysql_num_rows($result);
if ($anzahl != "" AND $tempvar != "0") {
mach_was1();
} else {
mach_was2();
}
Liefert mir die SQL-Abfrage Ergebnisse wird mach_was1() (seht es als Platzhalter) ausgeführt, gibt es keine Ergebnisse müsste dann doch eigentlich das ausgeführt werden was nach else kommt. Aber - quelle surprise - es passiert nichts.
$row["name"] und $row["titel"] habe ich übrigens auch mit isset() überprüft, nix führte zum Ziel.
Hat irgendjemand eine Idee wie ich mein Problem lösen könnte?
Viele Grüße
Paul
Holladiewaldfee,
$anzahl = mysql_num_rows($result);
if ($anzahl != "" AND $tempvar != "0") {
Hat irgendjemand eine Idee wie ich mein Problem lösen könnte?
Ja: Vergleiche nicht einen Integer-Wert mit einem String.
$a = mysql_num_rows($res);
if($a>0)
{ while(...)
blablubb(); }
else
echo 'War wohl nix';
Ciao,
Harry
Hallo,
$anzahl = mysql_num_rows($result);
if ($anzahl != "" AND $tempvar != "0") {Hat irgendjemand eine Idee wie ich mein Problem lösen könnte?
Ja: Vergleiche nicht einen Integer-Wert mit einem String.
$a = mysql_num_rows($res);
if($a>0)
{ while(...)
blablubb(); }
else
echo 'War wohl nix';
Also gut, jetzt sieht es bei mir folgendermaßen aus:
mysql_connect('localhost');
mysql_select_db("galerie");
$result = mysql_query("SELECT name, titel FROM album WHERE name = '" . $_POST["gname"] . "'");
while($row = mysql_fetch_array($result)) {
$anzahl = mysql_num_rows($result);
if ($anzahl>0) {
mach_was1();
} else {
mach_was2();
}
}
Die gleiche Situation wie vorhin, gibt es Ergebnisse wird mach_was1() ausgeführt, gibt es keine passiert nix.
Viele Grüße
Paul
Hallo Paul,
while($row = mysql_fetch_array($result)) {
$anzahl = mysql_num_rows($result);
if ($anzahl>0) {
mach_was1();
} else {
mach_was2();
}
}Die gleiche Situation wie vorhin, gibt es Ergebnisse wird mach_was1() ausgeführt, gibt es keine passiert nix.
Die While-Schleife wird NUR DANN ausgeführt, wenn Ergebnisse vorhanden sind. Harry hat Dir korrekten Code gepostet, Du hast ihn jedoch falsch verstanden.
if ($anzahl>0) {
mach_was1();
while($row = mysql_fetch_array($result)) {
$anzahl = mysql_num_rows($result);
}
} else {
mach_was2();
}
Viele Grüße,
Christian
Hallo,
Die While-Schleife wird NUR DANN ausgeführt, wenn Ergebnisse vorhanden sind. Harry hat Dir korrekten Code gepostet, Du hast ihn jedoch falsch verstanden.
if ($anzahl>0) {
mach_was1();
while($row = mysql_fetch_array($result)) {
$anzahl = mysql_num_rows($result);
}
} else {
mach_was2();
}
Danke euch, jetzt wird je nachdem ob Ergebnisse zurückgegeben werden oder nicht die richtige Aktion ausgeführt, allerdings schreint die Aktion nicht richtig zu sein. Folgendes habe ich innerhalb der if-Abfrage stehen (anstatt mach_was2()):
echo 'ok'; <--- Nur zum überprüfen vorhanden
while($row = mysql_fetch_array($result)) {
$myquery = mysql_query("INSERT INTO 'album' ( 'name' , 'titel' , 'sichtbar' , 'datum' ) VALUES ('" . $_POST["gname"] . "', '" . $_POST["gtitel"] . "', '" . $gsichtbar . "', '" . $curdate . "')");
if($myquery == FALSE) {
echo "Konnte die MySQL-Abfrage nicht verarbeiten <br />\n";
echo "MySQL-Antwort:".mysql_error();
die();
} else {
echo 'Einfügen der Daten war erfolgreich.';
}
}
"ok" wird ausgegeben, d.h. er springt mir in den richtigen Teil der vorhin besprochenen Schleife, die Abfrage wird allerdings nicht ausgeführt, ich finde keine neuen Datensätze in der Datenbank vor.
Wenn die Abfrage schief geht müsste doch eigentlich die Fehlermeldung ausgegeben werden.
Bei der Funktionsbeschreibung von mysql_query() steht ja folgendes:
Für alle anderen SQL Anweisungen ist der Rückgabewert von
mysql_query() im Erfolgsfall TRUE, im Fehlerfall FALSE. Ein
Rückgabewert ungleich FALSE bedeutet, dass die Anfrage gültig war
und vom Server ausgeführt werden konnte.
Hier wird aber anscheinend gar nix zurückgegeben, wie kann das sein?
Viele Grüße
Paul