Robert.: Tomaten auf den Augen?

Hallo,

ich habe eine Abfrage, die php nicht auswertet?

  
$result=mysql_query("select ID from tabelle where ID2 = 100");  
$row=mysql_fetch_row($result);  
var_dump($row[0]);  

ergibt NULL.

Wenn ich die Abfrage gleich in phpMyAdmin eingebe, erhalte ich die ID 4508. Die wäre auch korrekt. Nur, warum erhalte ich sie über php nicht? Ich sehe keinen Fehler.

Gruß, Robert

  1. Hi,

    Ich sehe keinen Fehler.

    Und ich sehe keinerlei Fehler*kontrolle* in deinem Script.

    Rückgabewerte auswerten, DB nach Fehlern *fragen*, etc. – leg los.

    MfG ChrisB

    --
    Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
    1. Rückgabewerte auswerten, DB nach Fehlern *fragen*, etc. – leg los.

      Fehlerausgabe

      Robert

  2. var_dump($row);

    ergibt bool(false)

    echo mysql_errno() . ": " . mysql_error() . "\n";

    ergibt

    0:

    Gruß, Robert

  3. Hallo,

    Ich sehe keinen Fehler.

    weil du keine Fehlerausgabe hast.

    Gruß
    Kalk

    1. weil du keine Fehlerausgabe hast.

      Fehlerausgabe

      Robert

  4. Hi,

    ich habe eine Abfrage, die php nicht auswertet?

    nein. Oder was wolltest du wissen?
    Der Satz ist als Aussage formuliert, aber mit einem Fragezeichen abgeschlossen. Irgendwas passt da nicht.

    $result=mysql_query("select ID from tabelle where ID2 = 100");

    $row=mysql_fetch_row($result);
    var_dump($row[0]);

    
    >   
    > ergibt NULL.  
      
    Okay, und wie du [zusätzlich festgestellt hast](https://forum.selfhtml.org/?t=217012&m=1489565), ist $row ein boolsches false. Also meldet mysql\_fetch\_row(), dass die Abfrage eine leere Ergebnismenge hatte (und das ist an sich kein Fehler, es ist also richtig, wenn mysql\_errno() dann 0 liefert). Gehe also Schritt für Schritt zurück: Was ergibt mysql\_query()? Ist überhaupt die Verbindung zum DBMS korrekt hergestellt, ist die richtige Datenbank selektiert?  
    Bei jedem Schritt der Datenbankabfrage können Fehler auftreten. Werte also grundsätzlich die Antwort der jeweiligen Funktionen aus!  
      
    
    > Wenn ich die Abfrage gleich in phpMyAdmin eingebe, erhalte ich die ID 4508. Die wäre auch korrekt. Nur, warum erhalte ich sie über php nicht? Ich sehe keinen Fehler.  
      
    Ich auch nicht, das ist aber angesichts des unvollständigen und aus dem Kontext herausgelöstes Codes auch nicht weiter verwunderlich.  
      
    Ciao,  
     Martin  
    
    -- 
    Die meisten Menschen werden früher oder später durch Computer ersetzt.  
    Für manche würde aber auch schon ein einfacher Taschenrechner genügen.  
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    
    1. Gehe also Schritt für Schritt zurück: Was ergibt mysql_query()? Ist überhaupt die Verbindung zum DBMS korrekt hergestellt, ist die richtige Datenbank selektiert?

      Da das bei mir über eine Funktion läuft und alle anderen Abfragen problemlos und korrekt laufen, gehe ich davon aus.

      var_dump($result);

      ergibt resource(39) of type (mysql result)

      Bei jedem Schritt der Datenbankabfrage können Fehler auftreten. Werte also grundsätzlich die Antwort der jeweiligen Funktionen aus!

      Fehlt mir noch ein Schritt?

      Robert

      1. Hi,

        var_dump($result);

        ergibt resource(39) of type (mysql result)

        Also ein gültiges Ergebnis.
        Wenn dann fetch direkt von Anfang an false liefert, dann gab es schlicht keine Datensätze im Ergebnis.

        Fehlt mir noch ein Schritt?

        Ist der gezeigte Code „Alles“?
        Nicht vielleicht vorher irgendwo schon mal ein fetch (beliebter Anfänger-Fehler)?

        Query an der Stelle ausgegeben und per Copy&Paste in pma getestet ergibt das erwartete Ergebnis?

        MfG ChrisB

        --
        Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
        1. Also ein gültiges Ergebnis.

          Ja.

          Ist der gezeigte Code „Alles“?

          Nein, das ganze ist in ein 200kb großes Gesamtscript eingebunden und ich suche die Stelle, an der das Ergebnis "zum falschen Ergebnis wird.

          Nicht vielleicht vorher irgendwo schon mal ein fetch (beliebter Anfänger-Fehler)?

          Das wäre natürlich eine Lösung gewesen, aber dem ist (leider) nicht so.

          Query an der Stelle ausgegeben und per Copy&Paste in pma getestet ergibt das erwartete Ergebnis?

          Genau. Ebenso ist es, wenn ich den Codeausschnitt in ein neues Script kopiere. Auch dann läuft es problemlos und ergibt das korrekte Ergebnis.

          Da die Lösung aber ja nicht sein, kann Euch das 200k-Script samt aller dazugehöriger (in anderen Dateien) ausgegliederten Funktionen zur Überprüfung zu posten, muß ich selber herausfinden, wo der noch entscheidende Code versteckt ist, der das Ergebnis zerdeppert.

          Wie gesagt, ein vorheriger fetch wäre eine nette Lösung gewesen. Aber der wars nicht. Auch die Auswahl der falschen DB wäre eine nette Lösung, aber auch das ist es nicht.

          Korrekte DB, Auswertung nach dem ersten fetch. Code ansich auch anscheinend ok.

          Ich bin etwas ratlos (vor allem, weil das eigentlich nichts wirklich schwieriges ist, ich verwende sowas 1000fach an anderen Stellen)...

          Robert

          1. Ich habe folgendes festgestellt:

            $result=mysql_query("select ID from tabelle where ID2 = 100");

            Die ID=100 wird im Produktivcode natürlich per Variable eingefügt.

            Und die Query funktioniert lediglich mit der letzten in der tabelle vorhandenen ID2 nicht. Sobald ich andere ID2s abfrage, läuft der Code.

            Aber die ID2 = 100 ist definitiv in der tabelle vorhanden!

            Irgendwie habe ich grad den Eindruck, meine DB spielt 1.April mit mir :-(

            Robert

            1. Und die Query funktioniert lediglich mit der letzten in der tabelle vorhandenen ID2 nicht. Sobald ich andere ID2s abfrage, läuft der Code.

              Aber die ID2 = 100 ist definitiv in der tabelle vorhanden!

              Ist sie auch. Wenn ich mir das nach Durchlauf des Scriptes in der DB ansehe.

              Aber an dieser Stelle der Scriptlaufzeit ist sie gerade gelöscht und wird erst wenig später wieder angelegt.

              Was für ein "doofer" Fehler. Ich könnt mich beißen!

              Danke für Eure Mithilfe

              Robert

  5. Lieber Robert.,

    wie lautet der Index, nach dem Du suchst, genau?

    where ID2 = [...]
    erhalte ich die ID 4508.

    Suchst Du nun "ID2" oder "ID"?

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Suchst Du nun "ID2" oder "ID"?

      Hi Felix,

      klar, sowas könnte natürlich (weil nicht alles an Code vorhanden) auch immer eine möglich Lösung sein.

      Leider ists in diesem Fall nicht so.

      Ich such tatsächlich die ID "where ID2 =".

      Robert