turk porno porno escort rokettube
Ergebnis 1 bis 13 von 13

Thema: Daten aus DB per Debug anzeigen

  1. #1
    Erfahrener Benutzer
    Registriert seit
    11.09.2007
    Beiträge
    251
    Thanks
    0
    Thanked 9 Times in 3 Posts

    Standard Daten aus DB per Debug anzeigen

    Hallo,

    in einem Controller lade ich Daten aus einer DB (ZF2).

    PHP-Code:
    $teasers $this->getTeaserTable()->getTeasers($a$b$c); 
    Wenn ich die Daten per foreach durchlaufe, dann werden mir die Daten angezeigt.

    PHP-Code:
    foreach ($teasers as $teaser) {   echo $teaser->id;   echo "<br>";} 
    Wenn ich $teasers mit Debug::dump($teasers); ausgebe, dann bekomme ich allerdings das hier ausgegeben:

    HTML-Code:
    object(Zend\Db\ResultSet\ResultSet)#286 (8) {  ["allowedReturnTypes":protected] => array(2) {    [0] => string(11) "arrayobject"    [1] => string(5) "array"  }  ["arrayObjectPrototype":protected] => object(Ibe\Model\Teaser)#268 (6) {    ["id"] => NULL    ["cluster"] => NULL    ["agent"] => NULL    ["affiliate"] => NULL    ["idpage"] => NULL    ["type"] => NULL  }  ["returnType":protected] => string(11) "arrayobject"  ["buffer":protected] => NULL  ["count":protected] => int(90)  ["dataSource":protected] => object(Zend\Db\Adapter\Driver\Pdo\Result)#285 (8) {    ["statementMode":protected] => string(7) "forward"    ["resource":protected] => object(PDOStatement)#274 (1) {      ["queryString"] => string(107) "SELECT `tabelle`.* FROM `tabelle` WHERE `a` = :where1 AND `b` = :where2 AND `c` = :where3"    }    ["options":protected] => NULL    ["currentComplete":protected] => bool(false)    ["currentData":protected] => NULL    ["position":protected] => int(-1)    ["generatedValue":protected] => string(1) "0"    ["rowCount":protected] => int(90)  }  ["fieldCount":protected] => int(51)  ["position":protected] => int(0)}
    Wenn ich die Seite z.B. debugge, sehe ich auch keine Datensätze.

    Wie bekomme ich die Datensätze dargestellt?

    Danke und Gruß,
    Mondy

  2. #2
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von mondy Beitrag anzeigen
    Wenn ich die Seite z.B. debugge, sehe ich auch keine Datensätze.
    Was dir aber nicht neu sein sollte, denn das ist klassische Verhalten von Standard-PHP mit PDO, mysqli und Co.: Du bekommst für deine Abfrage ein Objekt geliefert, welches das Ergebnis deiner Abfrage repräsentiert. Von diesem Objekt holst du dir dann die tatsächlichen Daten, als einzelnes Datum, als ganzen Datensatz oder alle Daten der Abfrage.

    An dieser Stelle bekommst du ein Objekt vom Typ „Zend\Db\ResultSet\ResultSet“, auch wenn die Doku hier etwas dünn ist, findest du trotzdem eine passende Methode.
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  3. #3
    Erfahrener Benutzer
    Registriert seit
    11.09.2007
    Beiträge
    251
    Thanks
    0
    Thanked 9 Times in 3 Posts

    Standard

    Tut mir leid, anscheinend bin ich zu blöd dafür :-(


    In ZF1 habe ich das immer so gemacht:


    Im Controller:


    $teasers = $this->modelContent->getTeasers($a, $b, $c);


    Im Model:


    PHP-Code:
    public function getTeasers($a$b$C){
        
    $select $this->db->select();
        
    $select->from( array( 'teasers' => 'teasers' ),
        array(
    'id''pic''link''type''text1''text2''text3''type''active' ) );

            ....

        return 
    $this->db->fetchAll($select);

    Dann konnte ich beim Debuggen in Zend Studio einen Breakpoint hinter $teasers setzen und dann direkt die ganzen Datensätze dort sehen, bzw. mit Zend_Debug::dump($teasers) die Daten auf dem Bildschirm sehen.

  4. #4
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von mondy Beitrag anzeigen
    In ZF1 habe ich das immer so gemacht:
    ZF1 ist hier einfach nicht mehr gültig.

    Wenn du mal dem Link folgst, dann wirst du folgendes in der Doku finden:
    PHP-Code:
    abstract class AbstractResultSet implements IteratorResultSetInterface
     
    {
         public function 
    initialize($dataSource)
         public function 
    getDataSource()
         public function 
    getFieldCount()

         
    /** Iterator */
         
    public function next()
         public function 
    key()
         public function 
    current()
         public function 
    valid()
         public function 
    rewind()

         
    /** countable */
         
    public function count()

         
    /** get rows as array */
         
    public function toArray()
     } 
    Die letzte Methode sieht doch gar nicht so schlecht aus. Also:
    PHP-Code:
    Debug::dump($teasers->toArray()); 
    (Das sagt dir übrigens auch deine IDE!)
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  5. #5
    Erfahrener Benutzer
    Registriert seit
    11.09.2007
    Beiträge
    251
    Thanks
    0
    Thanked 9 Times in 3 Posts

    Standard

    Das hatte ich sogar schon ausprobiert
    (use Zend\Debug\Debug

    PHP-Code:
    $data $teasers->toArray(); 
    Dann bekomme ich allerdings die folgende Fehlermeldung im Browser angezeigt:

    Warning: include(/usr/local/zend/apache2/htdocs/test1/module/Admin/config/../view/error/index.phtml): failed to open stream: No such file or directory in /usr/local/zend/apache2/htdocs/test1/vendor/zendframework/zendframework/library/Zend/View/Renderer/PhpRenderer.php on line 506

    Warning: include(): Failed opening '/usr/local/zend/apache2/htdocs/test1/module/Admin/config/../view/error/index.phtml' for inclusion (include_path='.:/usr/local/zend/var/libraries/Zend_Framework_1/default/library:/usr/local/zend/share/pear') in /usr/local/zend/apache2/htdocs/test1/vendor/zendframework/zendframework/library/Zend/View/Renderer/PhpRenderer.php on line 506

  6. #6
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von mondy Beitrag anzeigen
    Dann bekomme ich allerdings die folgende Fehlermeldung im Browser angezeigt:

    Warning: include(/usr/local/zend/apache2/htdocs/test1/module/Admin/config/../view/error/index.phtml): failed to open stream: No such file or directory in /usr/local/zend/apache2/htdocs/test1/vendor/zendframework/zendframework/library/Zend/View/Renderer/PhpRenderer.php on line 506

    Warning: include(): Failed opening '/usr/local/zend/apache2/htdocs/test1/module/Admin/config/../view/error/index.phtml' for inclusion (include_path='.:/usr/local/zend/var/libraries/Zend_Framework_1/default/library:/usr/local/zend/share/pear') in /usr/local/zend/apache2/htdocs/test1/vendor/zendframework/zendframework/library/Zend/View/Renderer/PhpRenderer.php on line 506
    Und warum ignorierst du dies einfach?!

    Es wird versucht, das Skript für die Fehlerausgabe aufzurufen, welches bei dir nicht vorhanden ist.
    Richte dies mal ein, dann wirst du bestimmt feststellen, das der Zwischenspeicher/Puffer fehlt.
    Geändert von Kaiuwe (08.04.2014 um 15:38 Uhr)
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  7. #7
    Erfahrener Benutzer
    Registriert seit
    11.09.2007
    Beiträge
    251
    Thanks
    0
    Thanked 9 Times in 3 Posts

    Standard

    Äh ja ok... View erst mal angelegt...

    Jetzt erhalte ich den Fehler:


    Ein Fehler ist aufgetreten
    An error occurred during execution; please try again later.
    Zusätzliche Information:
    Zend\Db\ResultSet\Exception\RuntimeException


    Datei:


    /usr/local/zend/apache2/htdocs/test1/vendor/zendframework/zendframework/library/Zend/Db/ResultSet/AbstractResultSet.php:273


    Meldung:


    Rows as part of this DataSource, with type object cannot be cast to an array


    Stapelüberwachung:


    ...

  8. #8
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von mondy Beitrag anzeigen
    Rows as part of this DataSource, with type object cannot be cast to an array
    „toArray“ funktioniert bei dir nicht, da dein Objekt „Ibe\Model\Teaser“ nicht entsprechend verwendet/umgewandelt werden kann. (Das du „Ibe\Model\Teaser“ verwendest, habe ich auch jetzt erst gesehen, denn in deinem Ausgangsbeitrag ist der Teil leider nur schlecht zu lesen.)
    Wenn ich es richtig gelesen habe, hat dein Objekt eine Methode „exchangeArray“. Wenn du schon die Methode hast, kannst du auch noch die Methode „toArray“ ergänzen. Dann läuft auch die „toArray“-Methode von „AbstractResultSet“.

    Ich persönlich verwende keine der beiden Methoden. Ich baue auf die „Hydratoren“ und spare mit damit diese zusätzlichen Methoden. Dann rennt hier ebenfalls die „toArray“-Methode für das gesamte Ergebnisset.
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  9. #9
    Erfahrener Benutzer
    Registriert seit
    11.09.2007
    Beiträge
    251
    Thanks
    0
    Thanked 9 Times in 3 Posts

    Standard

    Ich habe mich an das Tutorial gehalten:
    Database and models — Zend Framework 2 2.0.7 documentation - Zend Framework

    Leider habe ich noch keinen Überblick, was gut ist und was ggf. besser.
    Ist wahrscheinlich auch beides problemlos möglich.

    Um zunächst mal mein eigentliches Problem zu lösen, habe ich nun den folgenden Code hinzu gefügt:

    PHP-Code:
    public function toArray()
        {
        
    $return = array();
        
        foreach (
    $this as $row) {
        
    $return[] = $row;
        }
        
        return 
    $return;
        } 
    Es kommen mir allerdings gleich die Tränen...


    Meldung:

    This result is a forward only result set, calling rewind() after moving forward is not supported

  10. #10
    Erfahrener Benutzer
    Registriert seit
    11.09.2007
    Beiträge
    251
    Thanks
    0
    Thanked 9 Times in 3 Posts

    Standard

    Seltsam. Brwoser Cache gelöscht und jetzt klappt es.

  11. #11
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von mondy Beitrag anzeigen
    Um zunächst mal mein eigentliches Problem zu lösen, habe ich nun den folgenden Code hinzu gefügt:

    PHP-Code:
    public function toArray()
        {
        
    $return = array();
        
        foreach (
    $this as $row) {
        
    $return[] = $row;
        }
        
        return 
    $return;
        } 
    Wo hast du das eingefügt?

    Es fehlte die Methode „toArray“ in deinem Objekt „Ibe\Model\Teaser“ und dort sollte es deutlich anders aussehen!
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  12. #12
    Erfahrener Benutzer
    Registriert seit
    11.09.2007
    Beiträge
    251
    Thanks
    0
    Thanked 9 Times in 3 Posts

    Standard

    Funktioniert ja jetzt. Siehe letzter Eintrag. ;-)

    Ich habe es in der Teaser.php hinzu gefügt, dort wo das exchangeArray definiert ist.

    Zum debuggen ist es halt was blöd, denn dann muss ich extra Code schreiben, um es zu debuggen, und danach wieder entfernen.
    Wenn alles funktioniert, dann kann ich den Breakpoint ja auch in der View setzen. Wenn der Breakpoint dort sitzt, dann sehe ich allerdings nur, was in der View ankommt. Wenn sich der Fehler direkt im Controller oder im Model befindet, ist das eigentlich zu spät, denn man möchte ja wissen, an welcher Stelle der Fehler entsteht.

    Kann man eigentlich auch den kompletten Select anzeigen lassen, der ausgeführt wird? Im Object stehen auch nur Platzhalter drin.

    Danke im Übrigen für die intensive Hilfe.

  13. #13
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von mondy Beitrag anzeigen
    Ich habe es in der Teaser.php hinzu gefügt, dort wo das exchangeArray definiert ist.
    Aber was soll innerhalb deines Objekt „Teaser“ die Eigenschaft „$row“ sein?

    Zitat Zitat von mondy Beitrag anzeigen
    Zum debuggen ist es halt was blöd, denn dann muss ich extra Code schreiben, um es zu debuggen, und danach wieder entfernen.
    Die „toArray“-Methode ist nicht nur zur Überprüfung nützlich, sondern das du eben auch dein Objekt/die Eigenschaften des Objekts als Array ausliefern kannst.
    Solltest du dies nicht benötigen, dann schau dir mal das Thema „Hydrator“ an. Dann kannst du solche Methode („toArray“ und „exchangeArray“) aus deinen Objekten raushalten.

    Zitat Zitat von mondy Beitrag anzeigen
    Kann man eigentlich auch den kompletten Select anzeigen lassen, der ausgeführt wird? Im Object stehen auch nur Platzhalter drin.
    Schau dir mal den Hintergrund dazu an: „Prepared Statement“, dann wirst du feststellen, dass die Abfrage genau mit diesen Platzhaltern so an die DBMS geht. Der Rest wird dann auch dort zusammengesetzt.
    Du kannst dir aber trotzdem die Abfragen anschauen, in dem du das Log der Datenbank verwendest. (vorher aktivieren)
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 15.01.2013, 23:32
  2. Fehler aus dem SubForm im parent Form anzeigen
    Von Cruzcampo im Forum Formulare
    Antworten: 4
    Letzter Beitrag: 09.01.2013, 00:31
  3. Bild aus Action in Browser anzeigen
    Von fakerer im Forum Einsteigerfragen
    Antworten: 4
    Letzter Beitrag: 23.06.2011, 18:30
  4. Daten aus DB Render
    Von copy im Forum MVC
    Antworten: 10
    Letzter Beitrag: 14.09.2010, 15:36
  5. Antworten: 11
    Letzter Beitrag: 22.01.2009, 21:28

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •