Christian: where var = ''

Guten Abend,

ich habe folgendes (Syntax-)Problem:

Gegeben ist eine Variable $var, welche unabänderlich '' (Wert leere Menge, aber nicht NULL) sein kann.

Ich muss jetzt auswählen:
$sql = "SELECT * FROM Tabelle WHERE var = $var";
$qry = mysql_query($sql);
while($row = mysql_fetch_object($qry)){...}

Egal ob $sql
= "SELECT * FROM Tabelle WHERE var = ";
= "SELECT * FROM Tabelle WHERE var = ''";
= "SELECT * FROM Tabelle WHERE var = ``"; oder
= "SELECT * FROM Tabelle WHERE var = ''"; ist, es kommt immer:

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource

Dabei ist es egal, ob ich SELECT * FROM Tabelle WHERE var = $var direkt ins mysql_query() einsetze oder nicht.

Das Widersinnige für mich dabei ist, dass, wenn ich unter phpMyAdmin
SELECT * FROM Tabelle WHERE var = '' als Befehl eingebe, einwandfrei die richtigen Zeilen ausgewählt werden.

Vielen Dank schon mal für eure Hilfe.

Christian

  1. Hallo Christian,

    bitte versuche folgenden:

    select '*' from tabelle where var = '$var'

    Gruß,
    coolblue

    --
    never say oops after you submitted a job :-)
    _der_Ton_macht_die_Musik_!!!_
    1. Hallo coolblue,

      auch
      $sql = "SELECT '*' FROM Tabelle WHERE var = ''";
      liefert

      Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource

      Gruß,
      Christian

      1. Hallo Christian,

        versuche dieses Statement mal bei dir einzubauen, um eine genaue Fehlermeldung zu erhalten ==> echo mysql_error();

        Nähere Infos habe ich hier gefunden:

        http://www.webmasterpark.net/forum/webmaster-foren-archiv/topic/57756-1.html

        Gruß,
        coolblue

        --
        never say oops after you submitted a job :-)
        _der_Ton_macht_die_Musik_!!!_
  2. Ach ja.
    Zu ergänzen sei noch, dass das böse select * durch select 'var' ersetzt auch nicht die Lösung des Problems ist.

  3. Gegeben ist eine Variable $var, welche unabänderlich '' (Wert leere Menge, aber nicht NULL) sein kann.

    Ich muss jetzt auswählen:
    $sql = "SELECT * FROM Tabelle WHERE var = $var";

    Hier ist die Frage, was steht in $var?
    Evtl. musst du den Wert quoten oder escapen.

    Ein Debug Modus ist für Skripte keine schlechte Idee.
    z.b.

    print $sql if $DEBUG;

    und $DEBUG als globale Variabel defnieren (im Debugmodus != 0)

    $qry = mysql_query($sql);
    while($row = mysql_fetch_object($qry)){...}

    Egal ob $sql
    = "SELECT * FROM Tabelle WHERE var = ";
    = "SELECT * FROM Tabelle WHERE var = ''";
    = "SELECT * FROM Tabelle WHERE var = ``"; oder
    = "SELECT * FROM Tabelle WHERE var = ''"; ist, es kommt immer:

    Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource

    Was für ein Argument erwartet die Funktion mysql_fetch_object()?

    Das Widersinnige für mich dabei ist, dass, wenn ich unter phpMyAdmin
    SELECT * FROM Tabelle WHERE var = '' als Befehl eingebe, einwandfrei die richtigen Zeilen ausgewählt werden.

    da deutet darauf hin, dass das Argument für die Funktion einfach falsch ist, was sagt deine Dokumentation?

    Struppi.

    1. Hallo Struppi,

      Hier ist die Frage, was steht in $var?
      Evtl. musst du den Wert quoten oder escapen.

      Gegeben ist eine Variable $var, welche unabänderlich '' (Wert leere Menge, aber nicht NULL) sein kann.

      ^^

      Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource

      Was für ein Argument erwartet die Funktion mysql_fetch_object()?

      o.O

      Das Widersinnige für mich dabei ist, dass, wenn ich unter phpMyAdmin
      SELECT * FROM Tabelle WHERE var = '' als Befehl eingebe, einwandfrei die richtigen Zeilen ausgewählt werden.

      da deutet darauf hin, dass das Argument für die Funktion einfach falsch ist, was sagt deine Dokumentation?

      ? Wieso deutet das daraufhin, dass das Argument für die Funktion einfach falsch ist? Das war ja schon vorher bekannt. Ich würd sagen, das deutet darauf hin, dass das Problem ganz klar in der Syntax im PHP-Programm steckt, da mysql ja mit solchen ''-Werten umgehen kann.
      'Meine' Dokumentation hat mich zu dem Problem nichts finden lassen.

      Gruß Christian

      1. ? Wieso deutet das daraufhin, dass das Argument für die Funktion einfach falsch ist? Das war ja schon vorher bekannt. Ich würd sagen, das deutet darauf hin, dass das Problem ganz klar in der Syntax im PHP-Programm steckt, da mysql ja mit solchen ''-Werten umgehen kann.
        'Meine' Dokumentation hat mich zu dem Problem nichts finden lassen.

        Da ich kein PHP kann, hab ich mal google befragt.
        Folgende seite kam zum vorschein http://www.php.net/manual/de/function.mysql-fetch-object.php

        Da steht:
        mysql_select_db("mydb");
        $result = mysql_query("select * from mytable");
        while ($row = mysql_fetch_object($result)) {

        das ist wie du es benutzt, wobei (irgendwie ist das typisch für PHP) hier nicht das gemacht wird, was hier http://www.php.net/manual/de/function.mysql-query.php beschrieben wird und eigentlich zum a&o des Porgrammierens gehört. Das prüfen ob ein Ereignis in Ordnung ist.

        Da es nicht möglich ist mit dem Ausschnitt dir zu helfen, musst du selber was machen, in diesem Falle die Werte überprüfen:

        mysql_select_db("mydb");
        $result = mysql_query("select * from mytable");
        if (!$result) {
           die('Ungültige Abfrage: ' . mysql_error());
        }
        while ($row = mysql_fetch_object($result)) {

        Struppi.

        1. Hallo Struppi,

          anscheinend hast du mein Problem nicht verstanden. Ich muss mit den ''-Werten arbeiten und brauch da jetzt auch kein debugging mehr betreiben, weil ich genau weiß, wo der Fehler liegt.
          Das einzige was ich wissen möchte, ist, wie ich so eine Abfrage nach einem leeren Wert syntaktisch richtig mache!

          Gruß

          Christian

          1. anscheinend hast du mein Problem nicht verstanden. Ich muss mit den ''-Werten arbeiten und brauch da jetzt auch kein debugging mehr betreiben, weil ich genau weiß, wo der Fehler liegt.

            Offensichlich nicht:
            Egal ob $sql
            = "SELECT * FROM Tabelle WHERE var = ";
            = "SELECT * FROM Tabelle WHERE var = ''";
            = "SELECT * FROM Tabelle WHERE var = ``"; oder
            = "SELECT * FROM Tabelle WHERE var = ''"; ist, es kommt immer:

            Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource

            Wenn du einfach mal das Argument der funktion überprüfen würdest, wären wir einen Schritt weiter.

            Du bestätigst also, das
            $qry = mysql_query($sql);
            if (!$qry ) {
               die('Ungültige Abfrage: ' . mysql_error());
            }

            nichts ausgibt?

            Das einzige was ich wissen möchte, ist, wie ich so eine Abfrage nach einem leeren Wert syntaktisch richtig mache!

            so wie du es versucht hast (die zweite Variante sollte gehen) .

            Struppi.

            1. Danke,

              aber ich hab meinen Fehler gefunden; der war schon vor der mysql abfrage drin.

              gruß christian

  4. Moin!

    Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource

    Diese Fehlermeldung fordert dich indirekt (natürlich nur, wenn du den Fehler finden willst) dazu auf, dir die Fehlermeldung von MySQL ausgeben zu lassen, denn dein SQL-Statement war fehlerhaft und hat nicht zur Rückgabe eines gültigen MySQL-Ergebnisses geführt, welches man jetzt abrufen und ausgeben könnte.

    Nutze mysql_error().

    Lasse dir außerdem dein SQL-Statement ausgeben. Es wäre nicht das erste Mal, dass eine Variable in Zusammensetzung mit deinen festen Eingaben zu Ergebnissen führt, die nicht dem entsprechen, was du vermutest, weil schon vorher irgendwas im Skript anders läuft, als du glaubst.

    Also:
    $sql = "SELECT.... $var"
    mysql_query($sql) or die('Fehler im Query: '.$sql.'\n'.mysql_error());

    Das Ergebnis dieser zwei Zeilen brauchen wir hier - sofern du die Fehlerausgabe nicht selbst interpretieren und beheben kannst.

    - Sven Rautenberg

    1. Hallo Sven,

      jo danke, hab den Fehler schon selbst gefunden, er trat in der tat schon vor der sql-abfrage auf.

      gruß Christian