Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] preparedStatement auslesen funktioniert nicht ?!

Einklappen

Neue Werbung 2019

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

  • [Erledigt] preparedStatement auslesen funktioniert nicht ?!

    Hallo Leute,

    Ich habe folgendes Problem.. Wenn ich mit preparedStatement arbeite und meine Ergebnisse dann über die methode fetch() auslesen möchte, landet mein Programm jedesmal in einer Endlosschleife. Dabei sagt ja selber php.net, dass man einfach nur mit statement->fetch() alle daten auslesen kann.
    Hier mal mein Code, vllt seht ihr ja das Problem. Ich bin echt komplett leer im kopf. Dazu soll gesagt werden, der erste Datensatz lässt sich auslesen wenn ich halt nur $this->stmt->fetch(); mache, ohne schleife... aber das kann es ja net sein.

    PHP-Code:
    try{
                    
    //Database Connection holen
                    
    $this->dbCon parent::getDatabaseConnection();
                    
                    
    //Je nach dem was gesucht wird, so wird eine andere SQL Abfrage gestartet
                    
    switch($art){
                        case 
    'my':
                            
    //Statement für meine Touren vorbereiten
                            
    $this->stmt $this->dbCon->prepare(Storage::SELECT_MY_OR_HOST_TOURS);
                            
                            
    //Nötige Parameter dem Statement mitgeben
                              
    $this->stmt->bind_param('ii'$data[0], $data[0]);
                              
                        break;
                        case 
    'host':
                            
    //Statement für die host Touren vorbereiten
                            
    $this->stmt $this->dbCon->prepare(Storage::SELECT_MY_OR_HOST_TOURS);
                            
                            
    //Nötige Parameter dem Statement mitgeben
                            
    $this->stmt->bind_param('ii'$data[1], $data[1]);
                            
                        break;
                        default:
                            
    //Statement für alle Touren vorbereiten
                            
    $this->stmt $this->dbCon->prepare(Storage::SELECT_ALL_TOURS);
                        break;
                    }
                        
                        
    //Statement ausführen
                    
    $this->stmt->execute();
                    
                    
    //Ergebnisse der Select Anweisung, an diese Variablen binden
                    
    $this->stmt->bind_result($tourID$name$length$startDate$description$type$thread$author$isGroup$visibility$mapData);
                    
                    
    //Ein SplObjectStorage erzeugen, zum speichern der Touren
                    
    $toursArray = new \SplObjectStorage();
                    
                    
    //Über die Fetch() Methode alle Informationen auslesen und die das TourVO packen
                    
    while($this->stmt->fetch()){
                            
    //TourVO erzeugen und füllen
                            
    $tourVO = new TourVO();
                            
                            
    $tourVO->tourID $tourID;
                            
    $tourVO->name $name;
                            
    $tourVO->length $length;
                            
    $tourVO->startDate $startDate;
                            
    $tourVO->description $description;
                            
    $tourVO->type $type;
                            
    $tourVO->thread $thread;
                            
    $tourVO->author $author;
                            
    $tourVO->isGroup $isGroup;
                            
    $tourVO->visibility $visibility;
                            
    $tourVO->mapData $mapData;
                            
                            
    //tourVO ans SPLObjectStorage anhängen
                            
    $toursArray->attach($tourVO$tourVO->tourID);
                    }
                    
                    
    $this->stmt->close();
                    
                    
    parent::closeDatabaseConnection();
                    
                    return 
    $toursArray;
                }
                catch(\
    Exception $e){    
                    
    $this->stmt->close();
                    
                    
    parent::closeDatabaseConnection();
                    
                    return 
    null;
                } 
    Danke für jede Hilfe

    Gruß Raidri

  • #2
    -> geht nicht? gibts nicht!

    PDO? Mysqli? was hast du versucht zu debuggen?
    [B]PHP4?!?[/B]>>>[B]Aktuelle[/B] PHP Version: [B]5.2.11 || 5.3.0
    [URL="http://en.opensuse.org/Factory/News"]Suse 11.2 *vorfreude*[/URL]
    [/B]

    Kommentar


    • #3
      oh Entschuldigung, durch den code sieht man ja nicht was ich verwendet habe.

      Also ich arbeite mit MYSQLI. Teste diesen Teil mit der neuesten XAMPP Version.
      Habe dort mysql 5.1.37 drauf. Das sollte ja alles passen.

      Und wie oben schon erwähnt. schreibe ich einfach nur $this->stmt->fetch();,
      ohne Schleife so wird der erste Datensatz aus der Datenbank ausgelesen.

      Packe ich den Befehl, wie oben gezeigt, in eine While-Schleife.. so fängt der Browser an zu laden und bricht irgendwann ab, weil er in der Schleife fest sitzt. Für mich ist das halt unerklärlich.

      Hier noch meine Connection-Klasse

      PHP-Code:
      final class DBConnector extends \mysqli{
              
              private static 
      $server 'localhost';
              private static 
      $user 'root';
              private static 
      $pw '';
              private static 
      $dbName 'touren';
              private static 
      $dbConnection null;
              
              private function 
      __construct($server$user$pw$dbName){
                  
      parent::__construct($server$user$pw$dbName);
              }
              
              
              public static function 
      getConnection(){
                  if(!isset(
      self::$dbConnection)){
                      try{
                          
      self::$dbConnection = new DBConnector(self::$serverself::$userself::$pwself::$dbName);
                      }
                      catch(\
      Exception $e){
                          echo 
      $e->getMessage();
                      }
                  }
                  return 
      self::$dbConnection;
              }
              
              public static function 
      closeConnection(){
                  if(
      self::$dbConnection != null){
                      
      self::$dbConnection->close();
                  }
              }
              

              
              public function 
      __destruct(){
                  
              }
          } 

      Kommentar


      • #4
        lass dir mal

        PHP: mysqli_stmt::num_rows - Manual
        PHP: mysqli_stmt->errno - Manual
        PHP: mysqli_stmt->error - Manual

        ausgeben. kommentiere mal die schleife aus um zu sehen ob es diese überhaupt ist. kommentiere diese zuweisung aus:

        PHP-Code:
         $toursArray->attach($tourVO$tourVO->tourID); 
        [B]PHP4?!?[/B]>>>[B]Aktuelle[/B] PHP Version: [B]5.2.11 || 5.3.0
        [URL="http://en.opensuse.org/Factory/News"]Suse 11.2 *vorfreude*[/URL]
        [/B]

        Kommentar


        • #5
          num_rows funktioniert nur bei store_result... das verwende ich nicht. Habe es trotzdem mal zum testen gemacht und es liefert mir int(9). Also 9 Datensätze, so wie es sein soll.

          Die beiden Error ausgaben liefern jeweils nichts.

          Das attach von ObjectStorage löste auch nicht das Problem.

          Wenn ich jetzt anstatt das:

          PHP-Code:
          while($this->stmt->fetch()){
                                  
          //TourVO erzeugen und füllen
                                  
          $tourVO = new TourVO();
                                  
                                  
          $tourVO->tourID $tourID;
                                  
          $tourVO->name $name;
                                  
          $tourVO->length $length;
                                  
          $tourVO->startDate $startDate;
                                  
          $tourVO->description $description;
                                  
          $tourVO->type $type;
                                  
          $tourVO->thread $thread;
                                  
          $tourVO->author $author;
                                  
          $tourVO->isGroup $isGroup;
                                  
          $tourVO->visibility $visibility;
                                  
          $tourVO->mapData $mapData;
                                  
                                  
          //tourVO ans SPLObjectStorage anhängen
                                  
          $toursArray->attach($tourVO$tourVO->tourID);
                          } 
          dieses hier mache:
          PHP-Code:
          $this->stmt->fetch();

          //TourVO erzeugen und füllen
                                  
          $tourVO = new TourVO();
                                  
                                  
          $tourVO->tourID $tourID;
                                  
          $tourVO->name $name;
                                  
          $tourVO->length $length;
                                  
          $tourVO->startDate $startDate;
                                  
          $tourVO->description $description;
                                  
          $tourVO->type $type;
                                  
          $tourVO->thread $thread;
                                  
          $tourVO->author $author;
                                  
          $tourVO->isGroup $isGroup;
                                  
          $tourVO->visibility $visibility;
                                  
          $tourVO->mapData $mapData;
                                  
                                  
          //tourVO ans SPLObjectStorage anhängen
                                  
          $toursArray->attach($tourVO$tourVO->tourID); 
          bekomme ich immerhin den ersten Datensatz zurück.Ohne das der ganze Server zusammen bricht ohne ausgabe.

          Kann es sein, dass die neueste XAMPP Version iwie nen fehler in der mysqli klasse hat, die da noch nicht behoben wurde ?

          Kommentar


          • #6
            hmm ich muss da auch rumraten, kenne mich mit mysqli nicht so wirklich aus.

            kann es vllt. sein, das du hier bind_result nicht alle columns mitgibst die selektiert werden?

            PHP-Code:
            $this->stmt->bind_result($tourID$name$length$startDate$description$type$thread$author$isGroup$visibility$mapData); 
            Kann es sein, dass die neueste XAMPP Version iwie nen fehler in der mysqli klasse hat, die da noch nicht behoben wurde ?
            die wahrscheinlichkeit das du einen fehler machst ist genauso hoch
            [B]PHP4?!?[/B]>>>[B]Aktuelle[/B] PHP Version: [B]5.2.11 || 5.3.0
            [URL="http://en.opensuse.org/Factory/News"]Suse 11.2 *vorfreude*[/URL]
            [/B]

            Kommentar


            • #7
              Zitat von brian johnson Beitrag anzeigen
              hmm ich muss da auch rumraten, kenne mich mit mysqli nicht so wirklich aus.

              kann es vllt. sein, das du hier bind_result nicht alle columns mitgibst die selektiert werden?

              PHP-Code:
              $this->stmt->bind_result($tourID$name$length$startDate$description$type$thread$author$isGroup$visibility$mapData); 


              die wahrscheinliket das du einen fehler machst ist genauso hoch
              Vermutlich sogar höher . Ne aber, die anzahl der Parameter passen, wenn die nicht passen würden. dann würde er auch meckern. die erfahrung habe ich schon gemacht . Na, vllt sollte ich mich auch mal in richtung PDO bewegen. da ich das hier absolut nicht verstehe ^^

              Kommentar


              • #8
                Taste dich mal ran. Also per For-Schleife immer einen mehr holen. Wenn es mit 9 Datensätzen problemlos und schnell klappt, dann mal per var_dump die Rückgabe des zehnten fetch ausgeben.

                Mir persönlich sind derartige Probleme unbekannt und ich arbeite seit Monaten mit PHP 5.3 und dem MySQLi-Treiber (also auch dem neuen mysqlnd)
                [url]www.php-maven.org[/url] PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
                Twitter @ [url]https://twitter.com/#!/mepeisen[/url] und Facebook @ [url]http://t.co/DZnKSUih[/url]

                Kommentar


                • #9
                  Problem entdeckt

                  das auslesen von der "mapData" macht der mysqli wohl probleme

                  Da steht sowas drin:
                  Code:
                  <markers>
                    <marker name="Neuer Wegpunkt" lat="52.369721797917144" lng="9.72932560937501"/>
                    <marker name="Neuer Wegpunkt" lat="48.78423808741959" lng="9.14705021875001"/>
                  </markers>
                  muss ich mal schauen, wie ich das Problem löse ^^.

                  Trotzdem danke für die hilfe.

                  Kommentar


                  • #10
                    Wie ist die Spalte mapData definiert?
                    [url]www.php-maven.org[/url] PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
                    Twitter @ [url]https://twitter.com/#!/mepeisen[/url] und Facebook @ [url]http://t.co/DZnKSUih[/url]

                    Kommentar


                    • #11
                      Zitat von mepeisen Beitrag anzeigen
                      Wie ist die Spalte mapData definiert?
                      Das ist nen longtext

                      Kommentar


                      • #12
                        Ich muss mein problem hier nochmal auffrischen.
                        Das auslesen aller Daten geht wunderbar, solange ich mir halt nicht die mapData aus der Datenbank ziehe.
                        Sobald ich dies tue, schmiert der server ab.

                        Habe mir schon gedacht, da es ja XML ist, dass er versucht es direkt zu interpretieren und habe "htmlentites()" dazwischen gehauen. hatte leider keinen nutzen.

                        So, in der DB verwende ich ein longtext für die Spalte, wo es leider auch keinen Erfolg bringt wenn ich das auf was anderes änder.

                        Hat da jemand vllt noch eine gute Idee.

                        Danke

                        UPDATE::

                        Ok, liegt am demaskieren der XML Daten. Damit habe ich die lösung ^^

                        Kommentar

                        Lädt...
                        X