keine Ausgabe bei Abfrage über PDO

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • keine Ausgabe bei Abfrage über PDO

    Hallo,
    ich habe folgendes Problem:
    Ich greife mit PDO über ODBC mit dem Folgenden Skript auf eine Sybase Datenbank zu:
    <?PHP
    $dbh = new PDO('odbc:SERVER', 'user', 'pw');
    $sql='sp_help';
    print "$sql\n";
    $result = $dbh->query($sql);
    foreach ($result as $row)
    {
    print "$row[0], $row[1], $row[2]\n";
    }
    ?>

    Als Ausgabe erhalte ich wie erwartet jeweils die ersten drei Elemente jeder Zeile von sp_help.
    Wenn ich allerdings als query ein:
    $sql='select * from TABELLE';
    nehme, bekomme ich garkeinen output.
    In einem Ethereal trace habe ich allerdings gesehen, dass die daten vom Sybase server an mich gesendet werden.
    Ist das delay zwischen Abfrage und Ergebniss vielleicht zu lang, so dass php denkt es kommt nichts mehr? Hab ich vielleicht beim php-kompilieren etwas falsch gemacht?
    Es wäre klasse, wenn ihr mir helfen könntet.
    Grüsse,
    Marcel

  • #2
    error_reporting() und http://de3.php.net/manual/en/function.PDO-errorCode.php ergeben irgendwas?

    Kommentar


    • #3
      Hallo,

      leider ergeben errorCode() und errorInfo() kein Ergebnis (0000).
      Ich hab echt keine Ahnung wo der Fehler sein könnte. Die Querys werden
      ja ausgeführt und die Ergebnisse (laut Ethereal) im TDS-Layer an den Client zurückgeschickt. Ich kann die richtigen Daten in Ethereal auch sehen. Es kommt halt zu keinem printout von php.
      Grüsse,
      Marcel

      Kommentar


      • #4
        mach mal ein var_dump von $result und von jedem $row.

        Kommentar


        • #5
          Hallo, hier nochmal das gesamte skript:

          <?PHP
          error_reporting(E_ALL);

          $dbh = new PDO('odbc:SERVER', 'user', 'passwort');
          #$sql='sp_help';
          $sql='select * from tabelle';
          print "$sql\n";
          $result = $dbh->query($sql);

          echo "\nPDO::errorCode(): ";
          print_r($dbh->errorCode());
          echo "\nPDO::errorInfo(): ";
          print_r($dbh->errorInfo());
          print "\nvar_dump von result\n";
          var_dump($result);

          foreach($result as $row)
          {
          print "var_dump von row\n";
          var_dump($row);
          print "$row[0], $row[1], $row[2]\n";
          }
          ?>

          und hier die Ausgabe des Skripts:


          select * from tabelle

          PDO::errorCode(): 00000
          PDO::errorInfo(): Array
          (
          [0] => 00000
          [1] => 0
          [2] => ((null)[0] at (null):0)
          [3] =>
          )

          var_dump von result
          object(PDOStatement)#2 (1) {
          ["queryString"]=>
          string(81) "select * from tabelle"
          }

          Es wird also garnichts in das Array reingeschrieben, und die Schleife dementsprechend nicht durchlaufen.
          Bei einem sp_help als query enthält die Ausgabe des zweiten var_dumps
          dann entsprechend die richtigen elemente.

          Kommentar


          • #6
            http://de3.php.net/manual/en/function.PDO-query.php
            If you do not fetch all of the data in a result set before issuing your next call to PDO->query(), your call may fail. Call PDOStatement->closeCursor() to release the database resources associated with the PDOStatement object before issuing your next call to PDO->query().
            versuchs mal mit einem prepared statement (PDO->prepare() und ->execute()).

            Kommentar


            • #7
              Jo, danke.
              Ich werds am Dienstag ausprobieren. Bin leider erst dann wieder auf der Arbeit. Ich melde mich dann auf jeden Fall.
              Grüsse,
              Marcel

              Kommentar


              • #8
                Hallo,
                leider hat die Benutzung von prepare() und execute() das selbe Ergebnis.
                Hier nochmal das Skript

                <?PHP
                error_reporting(E_ALL);

                $dbh = new PDO('odbc:SERVER', 'USER', 'PASSWORT');
                #$sql='sp_help';
                $sql='select * from tabelle';
                print "$sql\n";
                $stmt = $dbh ->prepare($sql);
                $stmt ->execute();
                while ($row=$stmt->fetch())
                {
                print_r($row);
                }

                echo "\nPDO::errorInfo(): ";
                print_r($dbh->errorInfo());
                print "\nvar_dump von result\n";
                ?>

                mit der Ausgabe:

                select * from tabelle

                PDO::errorInfo(): Array
                (
                [0] => 00000
                [1] => 0
                [2] => ((null)[0] at (null):0)
                [3] =>
                )

                var_dump von result

                Ich habe das "Gefühl", dass PDO soweit eigentlich funktioniert, PHP aber irgendwie abbricht. Ich hab hier mal den configure-befehl. Kannst du das was falschen dran sehen?

                ./configure --with-gd --with-odbc --with-config-file-path=/etc --with-unixODBC=/usr/ --enable-pdo --with-zlib --with-pdo-odbc=unixODBC,/usr --with-jpeg --with-apxs2=/usr/local/apache2/bin/apxs --without-sqlite --with-mysql

                Grüsse,
                Marcel Sicking

                Kommentar


                • #9
                  Errors mal direkt nach prepare und execute abgefragt?
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    Eine Ausgabe mit errorcode() nach dem prepare und nach dem execute ergeben jeweils ein 0000, also leider nichts :-(
                    Ich hab auch diesmal wieder die Abfrage an der Datenbank mit ehtereal nachvervolgen können. Die Daten scheinen korrekt an PHP "geliefert" zu werden. Aber nichts wird ausgegeben.

                    Kommentar

                    Lädt...
                    X