mysql_num_rows($result) = 1 aber kein Datensatz vorhanden

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • mysql_num_rows($result) = 1 aber kein Datensatz vorhanden

    Hallo liebes Forum,

    ich arbeite schon länger mit PHP in Verbindung mit MySQL. Doch heute bin ich auf einen äußerst merkwürdigen Fehler gestoßen.

    Wenn ich folgendenden MySQL Befehl mit Hilfe von mysql_query() absende wird bei mysql_num_rows() als Anzahl '1' zurückgegeben. Wenn ich nun aber mit Hilfe von mysql_fetch_assoc($result) auf das Ergebnis zugreife erhalte ich nichts. Alle Selektionsfelder sind leer. Wenn ich jedoch den Query über das Mysql Control Center ausführe kommen Ergebnisse zurück.

    Vielleicht liegt das an den Sonderzeichen, die im WHERE-Bereich verwendet werden??


    $strSQL = "SELECT SUM(ABS(AA)) as AA, SUM(ABS(AB)) as AB, SUM(ABS(AC)) as AC, SUM(ABS(AD)) as AD, SUM(ABS(AE)) as AE, SUM(ABS(AF)) as AF, SUM(ABS(AG)) as AG, SUM(ABS(AH)) as AH, SUM(ABS(AI)) as AI, SUM(ABS(AK)) as AK, SUM(ABS(AL)) as AL, SUM(ABS(AM)) as AM, SUM(ABS(AO)) as AO, SUM(ABS(AP)) as AP, SUM(ABS(AR)) as AR FROM tbltest WHERE YearStamp = '200712S' AND Line = '<°!\"§$%&/()=?`*\'_:' ORDER BY AA DESC, AB DESC, AC DESC, AD DESC, AE DESC, AF DESC, AG DESC, AH DESC, AI DESC, AK DESC, AL DESC, AM DESC, AO DESC, AP DESC, AR DESC;";

    $result = mysql_query($strSQL, $mydb);

    echo(mysql_num_rows($result)); // Rueckgabe: 1

    $row = mysql_fetch_assoc($result);

    echo($row['AA']); // Rueckgabe:
    echo($row['AB']); // Rueckgabe:
    echo($row['AC']); // Rueckgabe:
    ....

    Eigentlich sollte bei allen Feldern '0' zurückgegeben werden.
    Ich hoffe mir kann jemand helfen

    Vielen Dank!
    Dominik

  • #2
    wat sagt den print_r($row); und warum sollte überall zwangsläufig 0 stehen??

    EDIT:
    btw lese ich gerade
    (http://de.php.net/manual/de/function...etch-array.php auch in bezug auf assoc):
    Falls Sie Aliase für Spalten verwenden, können Sie auf die Inhalte dieser Spalten nicht über ihren ursprünglichen Namen zugreifen. (In folgendem Beispiel können Sie 'field' nicht benutzen).
    kann es sein, das es ein problem gibt, weil alias und originalfeldname übereinstimmen??
    Last edited by arkos; 21-01-2008, 16:36.
    **********
    arkos
    **********

    Comment


    • #3
      .. AND Line = '<°!\"§$%&/()=?`*'_:' ..
      sollte eigentlich schon alleine nen parseerror geben, wenn du nach dem zeichen \ suchen willst, musst du \\ schreiben und ' müsste zu \' werden

      Comment


      • #4
        Schon mal vielen Dank für deine Antwort!

        print_r($row) sage folgendes:

        Array ( [AA] => [AB] => [AC] => [AD] => [AE] => [AF] => [AG] => [AH] => [AI] => [AK] => [AL] => [AM] => [AO] => [AP] => [AR] => )

        Es soll natürlich nicht zwangsläufig 0 zurückgegeben werden. Dies ist jedoch die Rückgabe, wenn ich den Query über das Mysql Control Center ausführe. Und genau dieser Rückgabewert ist in diesem Fall auch richtig.

        Comment


        • #5
          mein edit und krels einwand beachtet?
          **********
          arkos
          **********

          Comment


          • #6
            Die Aliasnamen verändern hat leider keine Änderung gebracht.

            Mit den Parserror hast du natürlich recht, da ist mir ein kleiner Fehler unterlaufen. Die WHERE Bedingung lautet folgendermaßen, was aber leider nichts an dem momentanen Fehler ändert

            WHERE YearStamp = '200712S' AND Line = '<°!\"§$%&/()=?`*\'_:'

            Comment


            • #7
              '<°!\"§$%&/()=?`*\'_:'


              ^Am Anfang wird nicht nach einem '\' gesucht sondern nach einem ' " '.
              Hier wird das Gänsefüschen geparst.

              Comment


              • #8
                steht in dem Feld denn wirklich '<°!\"§$%&/()=?`*\'_:' ?? weil das fragst du mir deinem "=" da ab
                EDIT:

                in einem String der mit ' ' eingeschlossen ist, brauchst du " nicht escapen

                Comment


                • #9
                  In der Tabellenspalte steht:

                  <°!"§$%&/()=?`*'_:


                  Hierbei handelt es sich natürlich nur um einen Härtetest, ob die Bedingungen in PHP auch richtig geparts werden. Ich frag mich aber warum genau der SQL String mit des MySQL Control Centers funktioniert??

                  Comment


                  • #10
                    nimmst du denn die gleichen query fürs MySQL Control Centers bzw woher nimmst das her? schonmal versucht die query mittels echo auszugeben und die dann ins ControlCenter einfügen?

                    Comment


                    • #11
                      Genau das hab ich gemacht. Im Controlcenter funktionieren beide Varianten:

                      WHERE YearStamp = '200712S' AND Line = '<°!"§$%&/()=?`*\'_:'

                      und

                      WHERE YearStamp = '200712S' AND Line = '<°!\"§$%&/()=?`*\'_:'

                      meine Bedingungen werden jeweils bei '=' Abfragen in PHP mit addslashes() geparst. Gibt es hier eine Funktion die genau die relevanten Zeichen für den Query parst?

                      Comment


                      • #12
                        mach mal
                        PHP Code:
                        mysql_query($sql) OR die(mysql_error()); 

                        Comment


                        • #13
                          Wenn ich das mache, tritt kein Fehler auf. Wie gesagt bei mysql_num_rows($result) kommt ja auch 1 zurück.

                          Comment


                          • #14
                            schräg. nur um mal was zu probieren... (auch wenn ich weiß, dass result = 1 eins) mach mal das "alt-hergebrachte":

                            Code:
                            while ($row = mysql_fetch_array($result))
                            {
                            echo $row['AA']; // Rueckgabe:
                            echo $row['AB']; // Rueckgabe:
                            echo $row['AC']; // Rueckgabe:
                            }
                            **********
                            arkos
                            **********

                            Comment


                            • #15
                              genau ein Durchlauf mit leeren Ergebnis.

                              Comment

                              Working...
                              X