php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 30.10.2009, 10:37  
Neuer Benutzer
 
Registriert seit: 25.10.2009
Beiträge: 16
PHP-Kenntnisse:
Fortgeschritten
Raidri befindet sich auf einem aufstrebenden Ast
Standard [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
Raidri ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 30.10.2009, 11:11  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard

-> geht nicht? gibts nicht! (Bitte aussagekräftige Threadtitel verwenden)

PDO? Mysqli? was hast du versucht zu debuggen?
__________________
PHP4?!?>>>Aktuelle PHP Version: 5.2.11 || 5.3.0
Suse 11.2 *vorfreude*
brian johnson ist offline  
Alt 30.10.2009, 11:19  
Neuer Benutzer
 
Registriert seit: 25.10.2009
Beiträge: 16
PHP-Kenntnisse:
Fortgeschritten
Raidri befindet sich auf einem aufstrebenden Ast
Standard

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(){
            
        }
    } 
Raidri ist offline  
Alt 30.10.2009, 11:34  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard

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); 
__________________
PHP4?!?>>>Aktuelle PHP Version: 5.2.11 || 5.3.0
Suse 11.2 *vorfreude*
brian johnson ist offline  
Alt 30.10.2009, 12:18  
Neuer Benutzer
 
Registriert seit: 25.10.2009
Beiträge: 16
PHP-Kenntnisse:
Fortgeschritten
Raidri befindet sich auf einem aufstrebenden Ast
Standard

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 ?
Raidri ist offline  
Alt 30.10.2009, 12:30  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard

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); 
Zitat:
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
__________________
PHP4?!?>>>Aktuelle PHP Version: 5.2.11 || 5.3.0
Suse 11.2 *vorfreude*

Geändert von brian johnson (30.10.2009 um 12:52 Uhr). Grund: typo
brian johnson ist offline  
Alt 30.10.2009, 12:48  
Neuer Benutzer
 
Registriert seit: 25.10.2009
Beiträge: 16
PHP-Kenntnisse:
Fortgeschritten
Raidri befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
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 ^^
Raidri ist offline  
Alt 30.10.2009, 13:28  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.234
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

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)
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist offline  
Alt 30.10.2009, 14:01  
Neuer Benutzer
 
Registriert seit: 25.10.2009
Beiträge: 16
PHP-Kenntnisse:
Fortgeschritten
Raidri befindet sich auf einem aufstrebenden Ast
Standard

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.
Raidri ist offline  
Alt 30.10.2009, 15:23  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.234
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

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


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Umlaute ersetzen funktioniert nicht richtig BlackSpirit PHP Tipps 2009 19 20.04.2009 12:04
Session funktioniert nicht bei session.use_cookies = Off Quagga PHP Tipps 2007 13 13.01.2007 18:27
[Erledigt] bestimmte ID's auslesen als array PHP Tipps 2007 2 31.10.2005 20:23
PHPForm funktioniert n. mehr nach Hinzufügen weiterer Felder PHP Tipps 2005-2 1 02.10.2005 14:12
Verständnisproblem beim auslesen aus DB Riot PHP Tipps 2005-2 2 16.09.2005 11:55
Daten eintragen und auslesen Rettungsdackel Datenbanken 0 14.09.2005 16:29
[Erledigt] Daten aus einer Datenbank auslesen Datenbanken 2 04.09.2005 19:13
Daten aus Pw-Geschütztem bereich auslesen PHP-Fortgeschrittene 2 26.08.2005 15:27
[Erledigt] nächste Zeile einer Db auslesen? PHP Tipps 2005-2 7 01.08.2005 00:11
Kontakrformular funktioniert nur zum Teil PHP Tipps 2005-2 12 18.07.2005 11:24
alle Verzeichnisse sortiert auslesen PHP Tipps 2005-2 7 17.07.2005 10:20
auslesen und nochmals auslesen?! $$$ ThiKool $$$ PHP Tipps 2005 23 10.03.2005 19:43
[Erledigt] Auslesen von Text incl. &quot; aus Textfeld PHP Tipps 2007 4 04.01.2005 13:30
Cookies auslesen funktioniert nicht... PHP Tipps 2004-2 2 25.12.2004 14:00
mehrere zeilen aus *.txt verschieden-farbig auslesen PHP Tipps 2004 3 30.06.2004 21:50

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
java preparedstatement ausgeben, http://www.php.de/php-einsteiger/60638-erledigt-preparedstatement-auslesen-funktioniert-nicht.html, prepared statements auslesen, prepared statement auslesen, preparedstatement parameter auslesen, prepared statement while schleife, preparedstatement schleife, prepared statements schleife zum auslesen, preparedstatement und for schleife, startdatum autor thread, bind_result nicht richtiges ergebnis, prepared statements daten auslesen, java daten auslesen mit preparedstatement, php werte aus fetchall auslesen, daten per statement auslesen und anzeigen, java preparedstatement anschauen, php fetch in for schleife, prepared statement schleife php, java preparedstatement statement anzeigen, php zeilen auslesen stmt

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:49 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum