PHP mysql_fetch_array spuckt unerklärliche Warnung aus

Zhen

Lt. Junior Grade
Registriert
Aug. 2009
Beiträge
299
Hallo Leute,
habe wieder mal ein kleines (oder auch großes) Problem. Sitze jetzt schon seit über 1,5 Stunden da dran, aber habs nicht geschafft es zu lösen!

Bin total am verzweifeln. Hier der Code, unten die Beschreibung =D

PHP:
$query = "SELECT * FROM test WHERE `Master-ID` = $variable";
$result = mysql_query($query);
		
if(!$result) {
  echo "Verbindungsfehler";
} else {
  while($row = mysql_fetch_array($result)) {
    if($row['Name'] == $Name) {
...
    }
  }
}

Der oben genannte Code spuckt mir ständig diese Warnung aus:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in xxx/test.php on line 18

ich versteh aber nicht wieso. Ich find im Quelltext auch keinen Fehler oder sowas. Das Select Statement funktioniert im PHP MY ADMIN auch perfekt.

Wegen diesem Fehler springt er auch nicht in die IF-Anweisung rein, sondern führt ständig den else-Zweig aus.
 
Benutz doch mal mysql_error(), dann bist du vielleicht schlauer. Bau mal echo mysql_error();
nach dem Funktionsaufruf ein und poste die Meldung.
 
Ich meinte übrigens die 2. IF-Anweisung führt er nicht aus, sondern nur den ELSE-Zweig von ihr (der in diesem Beispiel nicht aufgeführt ist).

Hoffe Ihr könnt mir helfen. Vielen Dank schon mal im Vorraus!
Ergänzung ()

Sinnlos. wenn ich "echo mysql_error();" schreibe dann spuckt es mir an der stelle nichts aus. Nur die Warnung die schon oben beschrieben steht.
 
Da kann man nur raten... dein Query ist zum Beispiel nicht mit einem Semikolon abgeschlossen.
Wenn es dann immer noch nicht geht, versuche mal eim simples "SELECT * FROM test;".
 
Hä?? An welcher Stelle? Also ich sehe da nichts wo ein Semikolon fehlen würde.
Oder bin ich mittlerweile Blind? =D
 
PHP:
$query = "SELECT * FROM test WHERE `Master-ID` = $variable";

--->>

PHP:
$query = "SELECT * FROM test WHERE `Master-ID` = $variable;";

Aber wie gesagt, teste mal das Minimalbeispiel SELECT * FROM test.
 
Die Variable ist doch innerhalb der Anführungszeichen und gehört zum SELECT Statement. Anschließend wird es durch ein Semikolon geschlossen.

Ich könnte auch:

PHP:
$query = "SELECT * FROM test WHERE `Master-ID` = " . $variable;

schreiben, aber das ergibt genau das Selbe wie der schon oben genannte Code.
 
SQL-Statements schließt man aber für gewöhnlich per Semikolon ab, und bei dir ist in beiden Fällen keines.
 
ehm... also eigentlich ja nicht!
Hab übrigens den Verdammten Fehler gefunden und behoben. Es lag allein an den Verdammten Anführungszeichen bei der "Master-ID" Angabe!
 
Zhen schrieb:
ehm... also eigentlich ja nicht!
Doch.

Nur bei der Funktion mysql_query() kann nur ein Kommando an die Datenbank abgegeben werden, weshalb sich das Problem löst, wenn kein Semikolon dabei ist.
Grundsätzlich gehört aber immer ein Semikolon zwischen zwei MySQL-Befehle.

@Thema
Hast magic_quotes angeschaltet?
Prüf das mal mit get_magic_quotes_gpc();
 
Zuletzt bearbeitet:
Eigentlich ja schon.

Zitat MySQL.com:

Ein Befehl besteht normalerweise aus einer SQL-Anweisung gefolgt von einem Semikolon. mysql ermittelt das Ende Ihrer Anweisung anhand des schließenden Semikolons und nicht auf der Basis der Eingabezeile.

Aber vermutlich macht PHP implizit eines hintendran, was aber eigentlich kein Freifahrtsschein dafür ist, es einfach wegzulassen.

Hab übrigens den Verdammten Fehler gefunden und behoben. Es lag allein an den Verdammten Anführungszeichen bei der "Master-ID" Angabe!

Deshalb habe ich ja 2 mal gesagt, teste nur mal select * from test :D


Aber im Endeffekt geht ja nun alles :)
 
@carom
Da mysql_query() nur ein Befehl abschickt, verhält es sich gleich wie PHP in diesem Fall.

Beispiel.php:
PHP:
echo 'hallo'
==> Keine Fehlermeldung , "hallo" wird problemlos ausgegeben

Beispiel2.php
PHP:
echo 'hallo '
echo 'welt'
==> Fehlermeldung (Syntax) , "hallo" wird ausgegeben, "welt" aber nie.
 
Zuletzt bearbeitet:
Asoooo... naja ok dann möchte ich mich entschuldigen. Das hab ich ehrlich gesagt nicht gewusst.
Hab bei mysql_query nämlich noch nie ein Semikolon gebraucht =D

Aber vielen Dank für die Aufschlüsselung =)

PS: naja alles geht bei dem Script leider immernoch nicht xD
jetzt spinnt der nämlich bei dem nächsten query. Vermute mal dass es auch wieder an den Anführungszeichen liegt, aber beheben konnte ich den Fehler leider noch nicht.

Probier aber weiterhin die ganzen Anführungszeichen aus xDD
 
Gibt mir die Zahl 1 aus. Also ist es wohl an.
Hab jetzt mittlerweile herausgefunden, dass der Fehler wo anders liegt. Er kommt nämlich nicht mal in die while-Schleife rein. Mir persönlich völlig unerklärlich wieso?!!

Hier nochmal der Code. Vielleicht sieht ja jemand etwas, was ich nicht sehe =D

PHP:
$query = "SELECT * FROM table WHERE 'Master-ID' = $Firma;";
$result = mysql_query($query);

if(!$result) {
  echo "Verbindungsfehler";
} else {
  while($row = mysql_fetch_array($result)) {
    if($row['Name'] == $Name) {
    
      $query = "UPDATE table SET `Telefon` = '$Tel', `Email` = '$Email'
        WHERE `Name` = '$Name' AND `Master-ID` = $Firma;";
      $result = mysql_query($query);

      if(!$result) {
        echo "Aktualisierungsfehler";
      } else {
        echo "AErfolg";
      }

    } else {
      ...
    }

  }
}
 
Und $result ist wirklich besetzt und nicht NULL?

Hast du mal direkt nach der While-Schleife, aber vor der IF-Klausel sowas wie
echo "test";
probiert.

Ergänzung:
Also ein Fehler hast du da definitiv:
Und zwar gibt es kein $row['Name'].
Zudem sollte dir der Unterschied zwischen
mysql_fetch_array()
und
mysql_fetch_assoc
klar werden! Du brauchst hier mysql_fetch_assoc() !

Und wenn doch mysql_fetch_array(), dann aber so:
mysql_fetch_array($result, MYSQL_ASSOC)
 
Zuletzt bearbeitet:
$row['Name'] das ist die Spalte namens "Name"
Diese wird ja bei dem SELECT * .... mit ausgewählt.
 
Siehe meine Ergänzung. Du kannst über deine Definition von $row aber so nicht zugreifen.

Ich würde zukünftlich, beim ersten versuch gleich print_r($row); in die Schleife testweise einbauen, um zu sehen WELCHE Informationen aus der Datenbank und wie sie geholt wurden.

P.S.: Der Titel ist ja sehr amüsant gewählt. Unerklärliche Warnung :D?
 
Zuletzt bearbeitet:
Also einen Fehler jetzt endlich behoben. Es lag tatsächlich daran, dass ich ÜBERALL "$query" und $result" verwendet hab. Nachdem ich nun alle $query und $result Variablen einmalig benannt habe ging das mit der Auswahl sowie dem Updaten und Regstrieren der Sätze.

Leider fehlt mir jetzt noch die Logik in dem Script. Wenn ich nämlich z.B. 10 Datensätze hab und der gesuchte Name ist Datensatz 5, dann trägt es den User 4 mal ein und dann 1 Update und weitere 5 Mal eintragen. =D
Ergänzung ()

Ja tut mir leid, ist mir nichts besseres eingefallen als titel xDD
 
Zuletzt bearbeitet:
Ah das ist mir gar nicht aufgefallen.

Ist aber lustig, du startest eine While-Schleife die auf einen Rückgabewert von $result beruht und überschreibst die selbige innerhalb der Schleife.
Eigentlich sehr elegant, wenn man das gezielt und präzise anwenden will :)

Betreffend er Logik kann ich dir nicht helfen, weil ich nicht den Rest des Skriptes kenne.
 
Zurück
Oben