Aoshi Geschrieben 5. Oktober 2010 Geschrieben 5. Oktober 2010 Hallo, habe meine eigene Datenbankklasse geschrieben die noch sehr sehr einfach ist. Jetzt habe ich ein Problem mit mysql_fetch_object, welches bei mysql_fetch_array nicht gibt...er tut einfach nichts..... Die Methode aus der Klasse: /** * Dies gibt die Resultate von dem Select Query * in einem object wieder * * @param $rData - Query für den Abruf von Daten * @return - gibt die Daten als Objekt zurück */ public static function fetchObject($rData) { // prüft, ob es erfolgreich war if($oResult = mysql_fetch_object($rData)) { return $oResult; } else { return false; } } [/PHP] Zum aufrufen: [PHP]while($oRow = dbklasse::fetchObject($rRes)) { $mache_dies_und_das = array(); } Das Problem ist, das er nichts zurück gibt und in die bedingung else fällt. Habe nachgeschaut ob es am query liegt, doch daran liegt es nicht...er gibt mir sogar was zurück: Resource id #19 Woran liegt es denn? mfg Aoshi Zitieren
flashpixx Geschrieben 5. Oktober 2010 Geschrieben 5. Oktober 2010 Da es sich um eine statische Methode handelt wäre die Frage, was in $rData enthalten ist. Nach PHP: mysql_fetch_object - Manual Gibt ein Objekt mit String-Eigenschaften zurück, die mit der angeforderten Zeile korrespondieren, oder FALSE wenn es keine weiteren Zeilen mehr gibt. Zitieren
Aoshi Geschrieben 6. Oktober 2010 Autor Geschrieben 6. Oktober 2010 (bearbeitet) in $rData ist das Resultat vom Query drinne. Als würde ich z.B. Mysql_fetch_object(mysql_query($sQuery)) anwenden. Nur meine klasse ist da was anders aufgebaut: public static function query($sQuery) { $rResult = mysql_query($sQuery); return $rResult; } public static function fetchObject($rData) { // prüft, ob es erfolgreich war if($oResult = mysql_fetch_object($rData)) { return $oResult; } else { return false; } } $rRes = dbklasse::query($sQuery); while($oRow = dbklasse::fetchObject($rRes)) { $mache_dies_und_das = array(); }[/PHP] So würde das ganze dann aussehen. Also eigentlich etwas ganz simples und sollte anversicht auch so funktionieren oder nicht? In $rData kam dann Resource id #19 raus, als ich es mir ausgeben lassen habe. Doch wenn ich es so mache, klappt es: [PHP]public static function query($sQuery) { $rResult = mysql_query($sQuery); return $rResult; } public static function fetchObject($rData) { // prüft, ob es erfolgreich war if($oResult = mysql_fetch_object($rData)) { return $oResult; } else { return false; } } $rRes = dbklasse::query($sQuery); while($oRow = mysql_fetch_object($rRes)) { $mache_dies_und_das = array(); } Klar könnte ich es so machen, aber wäre ja nicht der sinn der sache lg Aoshi PS.: Jetzt funktioniert es und habe keine Ahnung warum -.- Alles so wie jetzt beschrieben geblieben... Dennoch bedanke ich mich bei allen die mir die hilfe angeboten haben Bearbeitet 6. Oktober 2010 von Aoshi Zitieren
flashpixx Geschrieben 6. Oktober 2010 Geschrieben 6. Oktober 2010 Warum ist Deine Klasse überhaupt static? Ich denke daran wird auch das Problem sein, denn wenn Du den statischen Methodennamen aufrufst, der eben wie eine Funktion behandelt wird. Ich würde eine Datenbank Klasse nicht static machen Zitieren
etreu Geschrieben 6. Oktober 2010 Geschrieben 6. Oktober 2010 Dir ist aber schon klar, dass du viel unnützen Code schreibst, oder? Deine Methode könnte auch so aussehen: public static function fetchObject($rData) { return mysql_fetch_object($rData); } [/PHP] Zitieren
lit-web Geschrieben 6. Oktober 2010 Geschrieben 6. Oktober 2010 Warum überhaupt eine Methode die die sich fetchObject nennt? Du solltest dir ein wenig über dein Klassenkonzept Gedanken machen, dass ganze Ding ist Kurzerhand Schrott, schon allein weil du einen DB Wrapper (mehr ist das ja nicht) als static ins System jagst. Warum auserdem verinst du nicht sämtliche fetches in einer Methode? /* * * fetch auf die datenbank setzen * @param $query / vorher abgesandter Query an die datenbank * @param $fetchSwitch / auswahl welcher typ eines fetches gewählt wird * */ public function dbFetch($query, $fetchSwitch){ if(is_resource($this->_connect)){ switch($fetchSwitch){ case 'assoc': $this->_fetch = mysql_fetch_assoc($query); break; case 'array': $this->_fetch = mysql_fetch_array($query); break; case 'row': $this->_fetch = mysql_fetch_row($query); break; case 'object': $this->_fetch = mysql_fetch_object($query); break; } return $this->_fetch; } } [/PHP] So kannst du mehrere Fetches in einer Methode abhandeln. Warum machst du überhaupt [PHP] // prüft, ob es erfolgreich war if($oResult = mysql_fetch_object($rData)) { return $oResult; } eine Zuweisung in eine If Abfrage? Das ist vollkommener Humbug. Nimm das bitte nicht persönlich, aber das was du da machst hat weder was mit OOP zu tun und schon gar nicht mit einem durchdachten oder zumindest im Ansatz durchdachten Klassenjonzept. Gruß Lit-Web Zitieren
flashpixx Geschrieben 6. Oktober 2010 Geschrieben 6. Oktober 2010 ergänzend: Bevor man es selbst entwickelt, sollte man sich erst einmal informieren: ADOdb Database Abstraction Library for PHP (and Python) for MySQL, PostgreSQL, Microsoft SQL Server, Oracle, Firebird, Interbase, LDAP, Access, VFP, DB2 and many other databases Zitieren
lit-web Geschrieben 7. Oktober 2010 Geschrieben 7. Oktober 2010 Da kann man aber auch auf das gute und bewährte PDO zurück greifen und wenn eine eigene Klasse dann von PDO ableiten. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.