mysql_fetch_row(): supplied argument is not a valid MySQL result resource in

fvosgerau

Grünschnabel
Hallo! Ich hab ein mittelschweres Problem mit der sql-abfrage (glaube ich zumindestens)
Hier mein code:
PHP:
if ($_POST){
  $vname = trim($_POST ['vname']);
  $nname = trim($_POST['nname']);
}
echo "Gesucht wird nach: $vname $nname";

$suchen = mysql_query("SELECT id, vname, nname FROM vos_database WHERE vname LIKE '%$vname%' OR nname LIKE '%$nname%' ORDER BY id");
$zeilen = mysql_query($suchen);
$treffer = mysql_affected_rows();
if ($treffer==0){
  echo "Leider keine Übereinstimmung gefunden! Bitte versuchen Sie es mit einem noch einmal mit einem anderen Suchbegriff!";
} else {
  while (list ($id, $vname, $nname) = mysql_fetch_row($zeilen)){
    get_person($id);
    echo "<br /n>";
  }
}
Fehlermeldung: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in usw.... Woran kann das liegen?
 
Du hast da was doppelt gemoppelt:
Code:
$suchen = mysql_query("SELECT id, vname, nname FROM vos_database WHERE vname LIKE '%$vname%' OR nname LIKE '%$nname%' ORDER BY id");
$zeilen = mysql_query($suchen);

entweder so:
Code:
$suchen = "SELECT id, vname, nname FROM vos_database WHERE vname LIKE '%$vname%' OR nname LIKE '%$nname%' ORDER BY id"
$zeilen = mysql_query($suchen);
oder so:
Code:
$zeilen = mysql_query("SELECT id, vname, nname FROM vos_database WHERE vname LIKE '%$vname%' OR nname LIKE '%$nname%' ORDER BY id");
....wäre besser
 
Spontan würde ich sagen es liegt daran dass du 2 mysql_query ausführst.

Also das mysql_query bei $suchen weg.

Wenn es dann immernoch nicht geht, echo auf $suchen. Den Query der ausgegeben wird in phpMyAdmin(oder anderes Programm...) ausführen.

//edit: Sven Mintel war halt schneller, buh :(
 
Zuletzt bearbeitet:
@ Sven

Hab ich das richtig verstanden... du meinst...
PHP:
$zeilen = mysql_query("SELECT id, vname, nname FROM vos_database WHERE vname LIKE '%$vname%' OR nname LIKE '%$nname%' ORDER BY id");
...wäre besser?

Kannst du erklären warum? Will ja auch dazulernen.

Ich mache das nämlich immer in der Form:
PHP:
$suchen = "SELECT id, vname, nname FROM vos_database WHERE vname LIKE '%$vname%' OR nname LIKE '%$nname%' ORDER BY id"
$zeilen = mysql_query($suchen);
 
Keine der beiden Methoden ist "besser" in dem Sinne. Evtl. ist die zweite übersichtlicher, im Endeffekt kommt bei beiden das selbe raus.
 
Klar! Doppelt Abfrage! Hätte ich auch gleich drauf kommen können, Fehlermeldung ist weg, aber jetzt schmeißt er mir SÄMTLICHE Datensäztze raus, was natürlich nicht im Sinne des Erfinders ist! Hab jetzt den Code SO:
PHP:
$suchen = "SELECT id, vname, nname FROM vos_database WHERE vname LIKE '%$vname%' OR nname LIKE '%$nname%' ORDER BY id";
$zeilen = mysql_query($suchen);
$treffer = mysql_affected_rows();
if ($treffer==0){
  echo "Leider keine Übereinstimmung gefunden! Bitte versuchen Sie es mit einem noch einmal mit einem anderen Suchbegriff!";
} else {
  while (list ($id, $vname, $nname) = mysql_fetch_row($zeilen)){
    get_person_ausgabe($id);
    echo "<br /n>";
  }
}
 
So wie Du es im letzten Beitrag schreibst muss/müsste es auch ohne Probleme funktionieren (siehe auch Erklärung von Sven).

Ganz am Anfang hast Du aber folgendes geschrieben:

PHP:
$suchen = mysql_query("SELECT id, vname, nname FROM vos_database WHERE vname LIKE '%$vname%' OR nname LIKE '%$nname%' ORDER BY id"); 
$zeilen = mysql_query($suchen);

Hier führst Du in der ersten Zeile die SQL-Abfrage aus und übergibst das Ergebnis an die Variable $suchen.
In der zweiten Zeile versucht Du dieses Ergebnis erneut als Abfrage auszuführen und an die Variable $zeilen zu übergeben. Das ist es dann was den Fehler auslöst.

Ich persönlich übergebe die SQL-Anweisung auch immer zuerst an eine Variable, wie z.B.

PHP:
$sql = "SELECT * FROM tabelle WHERE feld = 'abc'"
$result = mysql_query($sql);

Besser oder schlechter ist das nicht wie wenn man die Anweisung gleich bei mysql_query reinschreibt. Aber bei kompliziertenren Abfragen kann man sich so einfach per echo die komplette Anweisung am Bildschirm anzeigen. Da entdeckt mann dann oft ein vergessenes Zeichen.

Gruß Thomas
 
Bist du dir sicher, dass es ein Zufall ist, dass alle Datensätze ausgespuckt werden?
Oder ist das Ergebnis der Suche evtl Tatsächliche, dass die Suchmaske auf alle Datensätze zutrifft?
 
Lass dir mal den generierten Query ausgeben. Ich wette meinen Morgenkaffee darauf, dass $vname und $nname leer sind. Darauf solltest du vorher prüfen.
 
Zurück