Gerhard: (or SQL) Variable leer aber auch nicht

Hallo!

Ich habe folgende DB-Abfrage:

  
/*...*/  
/*1*/  $strStatement= "SELECT name,farbe,darstellung,schriftfarbe,vorname ";  
/*2*/  $strStatement.="FROM tb_user ";  
/*3*/  $strStatement.="WHERE id='".$strUserId."'";  
/*4*/  $rsUser=mysql_db_query("intranet",$strStatement,$vDBC);  
/*5*/  var_dump($rsUser); //  
/*6*/  $vErg=mysql_fetch_row($rsUser);  
/*...*/  

Zwar liefert die Ausgabe in Zeile 5 dass etwas ausgelesen wurde:
  resource(3) of type (mysql result)
Allerdigns müsste es ja eine resource(5) sein, da ich 5 Felder abfrage.
Des weiteren liefert das fetch-row in Zeile 6 false zurück.

Was stimmt nicht?
lg Gerhard

  1. hi,

    /*4*/  $rsUser=mysql_db_query("intranet",$strStatement,$vDBC);

    mysql_db_query() ist veraltet und sollte nicht mehr benutzt werden. nutze mysql_query().

    Zwar liefert die Ausgabe in Zeile 5 dass etwas ausgelesen wurde:
      resource(3) of type (mysql result)
    Allerdigns müsste es ja eine resource(5) sein, da ich 5 Felder abfrage.

    nein.
    das heißt lediglich, dass die zurückgelieferte ressource intern die nummer 3 hat. das ist für dich vollkommen uninteressant.

    Des weiteren liefert das fetch-row in Zeile 6 false zurück.
    Was stimmt nicht?

    deine fehlerbehandlung. nutze mysql_error().

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. deine fehlerbehandlung. nutze mysql_error().

      Mache ich bereits. Es ist kein SQL-Error.

      Weiß jemand weiter?

      1. Hallo Gerhard

        deine fehlerbehandlung. nutze mysql_error().
        Mache ich bereits. Es ist kein SQL-Error.

        Bist Du Dir sicher, dass Deine Abfrage eine nichtleere Ergebnismenge zurückliefert?

        Prüfe die Anzahl der Datensätze mit mysql_num_rows.

        Freundliche Grüße

        Vinzenz

      2. Huhu Gerhard

        Mache ich bereits. Es ist kein SQL-Error.

        Aber vielleicht eine leere Ergebinsmenge.
        Guck Dir die Query an und prüfe ob es zu Deinem "where" überhaupt einen Datensatz gibt.
        Oder hänge probehalber mal ein " OR 1" an.

        Viele Grüße

        lulu

        --
        bythewaythewebsuxgoofflineandenjoytheday
  2. Hallo Gerhard,

    /*1*/  $strStatement= "SELECT name,farbe,darstellung,schriftfarbe,vorname ";
    /*2*/  $strStatement.="FROM tb_user ";
    /*3*/  $strStatement.="WHERE id='".$strUserId."'";

    gibt es einen Datensatz bei der das Feld id den Wert aus $strUserId enthält? Was sagt mysql_num_rows()? hast du dir den Query mal ausgeben lassen ob da auch wirklich das drinsteht, was du erwartest?

    Grüße aus Nürnberg
    Tobias

    1. Naja num_rows liefert mir jetzt 0, was mich verblüfft, denn in diesem Fall müsste ja der Rückgabewert von mysql_db_query() false sein oder?
      In diesem Fall hab ich den Fehler ja schon etwas gezielter lokalisiert.
      Danke lg Gerhard

      1. Ahoi Gerhard,

        Naja num_rows liefert mir jetzt 0, was mich verblüfft, denn in diesem Fall müsste ja der Rückgabewert von mysql_db_query() false sein oder?

        nein, mysql_db_query() gibt nur false zurück wenn was schief lief, wenn
        es keinen entsprechenden datensatz gibt wird nicht zwingend false
        zurückgegeben. das dir num_rows 0 liefert ist wohl darauf zurückzuführen
        das die WHERE-clause auf keinen datensatz zutrifft.

        MfG

        --
        Alle Angaben wie immer ohne Gewähr
        PPPS: ich trinke gerne ab und an mal eine tote Tante.
      2. Hallo Gerhard,

        Naja num_rows liefert mir jetzt 0, was mich verblüfft, denn in diesem Fall müsste ja der Rückgabewert von mysql_db_query() false sein oder?

        ergänzend zu Daniels Ausführungen solltest Du Dir die Erläuterung zu mysql_query() durchlesen. Ich gehe davon aus, dass diese für mysql_db_query(), die ich noch nie verwendet habe und nie verwenden werde, genauso gilt.

        Die Tatsache, dass ein DBMS eine Abfrage ausführen kann, sagt nun mal nicht über die Anzahl der zurückgelieferten Datensätze aus.

        Freundliche Grüße

        Vinzenz