boverter: mysql_query, der 1. klappt, der 2. nicht.

Hallo an alle,

folgendes Problem: Ich starte 2 mysql_query-Abfragen, die 1. ($result) wird mir korrekt angezeigt, die 2. ($result2) wird mir nicht angezeigt, also es kommt auch kein ressource ID# dabei heraus. Alle Tabellenfelder sind korrekt, die habe ich x-fach nachgelesen.

Sehe ich vor lauter Bäume den Wald nicht mehr?

  
$sql = "SELECT * FROM `naviuser` WHERE `p_id` = '$projektid' && `u_id` = '$_SESSION[userid]'";  
$result = mysql_query ($sql);  
while ($row=mysql_fetch_array($result))  
  {  
     $navi2 = $row['navi_id'];  
     $sgl2 = "SELECT * FROM `navigation` WHERE `naviid` = '$navi2'";  
     $result2 = mysql_query ($sql2);  
     $row2=mysql_fetch_array($result2);  
     $navtext = $row2['text'];  
  }  

Vielleicht sieht ja einer von euch irgendwo einen versteckten Fehler. Danke für jeden Hinweis

-boverter-

  1. Hi,

    Vielleicht sieht ja einer von euch irgendwo einen versteckten Fehler.

    MySQL "versteckt" keine Fehler - man muss es nur mit mysql_error() freundlich nach ihnen fragen.

    MfG ChrisB

    --
    „This is the author's opinion, not necessarily that of Starbucks.“
    1. Hi,

      Vielleicht sieht ja einer von euch irgendwo einen versteckten Fehler.

      MySQL "versteckt" keine Fehler - man muss es nur mit mysql_error() freundlich nach ihnen fragen.

      MfG ChrisB

      Danke für den Hinweis, Fehlermeldung: Query was empty

      Aber ich weiß einfach nicht warum. Die Tabelle 'navigation' existiert, die Spalte 'naviid' innerhalb der Tabelle auch. Die Variable $navi2 hat einen Wert der in der Spalte 'naviid' auch vorkommt.

      1. Hi,

        bitte zitiere vernuenftig.

        Danke für den Hinweis, Fehlermeldung: Query was empty

        Aber ich weiß einfach nicht warum. Die Tabelle 'navigation' existiert, die Spalte 'naviid' innerhalb der Tabelle auch. Die Variable $navi2 hat einen Wert der in der Spalte 'naviid' auch vorkommt.

        Bei einer Query, die einfach nur kein Ergebnis lieferte, bekommst du durchaus eine Ressource-ID, und auch nicht diese Fehlermeldung.

        Die Meldung besagt, dass du gar keine Query an die Datenbank uebergeben hast - also mysql_query "leer" aufgerufen hast.
        Vermutlich ein Variablen-Schreibfehler - auf den dich PHP mittels error_reporting haette hinweisen koennen.

        MfG ChrisB

        --
        „This is the author's opinion, not necessarily that of Starbucks.“
        1. Hello,

          Vermutlich ein Variablen-Schreibfehler - auf den dich PHP mittels error_reporting haette hinweisen koennen.

          jetzt wo du's sagst, man sieht ihn bis 7 Meilen bei Gegenwind...

          MfG
          Rouven

          --
          -------------------
          sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
          Unser Problem ist, dass wir eine Demokratie entwickelt haben, was nicht immer der richtige Weg ist  --  Bernie Ecclestone zu den lästigen Diskussionen um Regeländerungen in der Formel 1
          1. Hallo Rouven,

            Vermutlich ein Variablen-Schreibfehler - auf den dich PHP mittels error_reporting haette hinweisen koennen.
            jetzt wo du's sagst, man sieht ihn bis 7 Meilen bei Gegenwind...

            sähe er sich die Quelle der Weisheit an, statt sich üblem Gegenwind auszusetzen, könnte er die Variable gar nicht falsch schreiben, weil sie gar nicht nötig wäre ...

            Freundliche Grüße

            Vinzenz

            1. Hi,

              Vermutlich ein Variablen-Schreibfehler - auf den dich PHP mittels error_reporting haette hinweisen koennen.
              jetzt wo du's sagst, man sieht ihn bis 7 Meilen bei Gegenwind...

              sähe er sich die Quelle der Weisheit an, statt sich üblem Gegenwind auszusetzen, könnte er die Variable gar nicht falsch schreiben, weil sie gar nicht nötig wäre ...

              Was aber grundsaetzlich natuerlich nichts daran aendert, dass er das error_reporting waehrend des Entwickelns unbedingt aktivieren sollte.

              MfG ChrisB

              --
              „This is the author's opinion, not necessarily that of Starbucks.“
              1. Ich danke euch allen für eure Statements. Habe das 'g' mal durch ein 'q' ausgetauscht und stell mich erstmal dafür 10 Minuten in die Ecke.

                Das errorr_reporting werde ich auch aktiv lassen und mit Joins werde ich mich ebenfalls beschäftigen.

                DANKE an euch alle!

                Gruß

                -boverter-

              2. Hallo Chris,

                sähe er sich die Quelle der Weisheit an, statt sich üblem Gegenwind auszusetzen, könnte er die Variable gar nicht falsch schreiben, weil sie gar nicht nötig wäre ...

                Was aber grundsaetzlich natuerlich nichts daran aendert, dass er das error_reporting waehrend des Entwickelns unbedingt aktivieren sollte.

                auf jeden Fall, daran sollte es keinen Zweifel geben. display_errors auch nicht vergessen :-)

                Freundliche Grüße

                Vinzenz

                PS: Wenn der OP seinen Code beibehält, muss er dennoch gegenwind gegen quelle eintauschen oder umgekehrt ...

  2. Hallo,

    folgendes Problem: Ich starte 2 mysql_query-Abfragen, die 1. ($result) wird mir korrekt angezeigt, die 2. ($result2) wird mir nicht angezeigt, also es kommt auch kein ressource ID# dabei heraus. Alle Tabellenfelder sind korrekt, die habe ich x-fach nachgelesen.

    Sehe ich vor lauter Bäume den Wald nicht mehr?

    Du möchtest statt PHP einen Join verwenden.

    Lektüretipps:
    Einführung in Joins
    Fortgeschrittene Jointechniken

    Schließlich baust Du einen simplen INNER JOIN aufwendig mit PHP und teuren Abfragen in einer Schleife nach. Das ist *keine* gute Idee - und fehlerträchtig, wie Du siehst :-)

    Weiterhin ist es auch nicht gerade ressourcenschonend, sich die Inhalte aller Spalten einer Tabelle zurückgeben zu lassen, wenn man an einer einzigen interessiert ist.

    $sql = "SELECT * FROM naviuser WHERE p\_id = '$projektid' && u\_id = '$_SESSION[userid]'";
    $result = mysql_query ($sql);
    while ($row=mysql_fetch_array($result))
      {
         $navi2 = $row['navi_id'];
         $sgl2 = "SELECT * FROM navigation WHERE naviid = '$navi2'";
         $result2 = mysql_query ($sql2);
         $row2=mysql_fetch_array($result2);
         $navtext = $row2['text'];
      }

    Weiterhin verzichtest Du auf jegliche Kontextgemäße Behandlung und verläßt Dich somit entweder auf die unsäglichen Magic Quotes oder bist komplett für SQL-Injektion offen und gelegentlich kann es auch einfach nur zu einem Fehler kommen ...

      
    SELECT  
        <spalten aus naviuser, die Du benötigst>  
    FROM  
        naviuser  
    INNER JOIN  
        navigation  
    ON  
        naviuser.navi_id = navigation.naviid  -- Du bist inkonsequent.  
    WHERE  
        naviuser.p_id = <projektid>  
    AND  
        naviuser.u_id = <Session-Wert>  
    
    

    Die Werte aus Deinen PHP-Variablen solltest Du mit mysql_real_escape_string behandeln, da Du noch die veralteten mysql_*-Funktionen nutzt. Zum Zusammenbauen Deines Statements führt die Verwendung von sprintf() zu lesbarerem Code.

    Näheres findest Du selbstverständlich massenhaft im Archiv, zum Beispiel in diesem Archivbeitrag von dedlfix mit vielen netten Links, die ich Dir sehr ans Herz lege.

    Freundliche Grüße

    Vinzenz