OOP Programmierung verursacht ein Komischen Fehler

Callboy

Mitglied
Hallo Leute,

ich habe aus einem PHP 5 Programmierungs Buch eine Klasse abgeschrieben so wie es dort auch steht aber leider bekomme ich als ausgabe eine Warnung mit der ich total ratlos bin und nicht nach vollziehen kann wo der Hacken liegt.

Die Klasse sieht so aus:

PHP:
class DB_Mysql {
    protected $user;
    protected $pass;
    protected $dbhost;
    protected $dbname;
    protected $dbh;            // Datenbankverbindungs-Handle

    public function _construct($user, $pass, $dbhost, $dbname) {
        $this->user = $user;
        $this->pass = $pass;
        $this->dbhost = $dbhost;
        $this->dbname = $dbname;
    }
    
    protected function connect() {
        $this->dbh = mysql_pconnect($this->dbhost, $this->user, $this->pass);
        if(!is_resource($this->dbh)) {
            throw new Exception;
        }
        if(!mysql_select_db($this->dbname, $this->dbh)) {
            throw new Exception;
        }
    }
    
    public function execute($query) {
        if(!$this->dbh) {
            $this->connect();
        }
        $ret = mysql_query($query, $this->dbh);
        if(!$ret) {
            throw new Exception;
        }
        else if(!is_resource($ret)) {
            return TRUE;
        }
        else {
            $stmt = new DB_MysqlStatement($this->dbh, $query);
            $stmt->result = $ret;
            return $stmt;
        }
    }
}
Zum Testen dieser Klasse habe ich folgendes geschrieben:

PHP:
$dbh = new DB_Mysql("root", "", "localhost", "cordes");
$query = "SELECT * FROM `tbl_login` WHERE `username` = 'admin';";
$stmt = $dbh->execute($query);
Und als ausgabe bekomme ich diese Fehlermeldung bzw. Warnung zu sehen.

Warning: mysql_pconnect() [function.mysql-pconnect]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\xampp\htdocs\test_scripte\newfile.php on line 18

Fatal error: Uncaught exception 'Exception' in C:\xampp\htdocs\test_scripte\newfile.php:20 Stack trace: #0 C:\xampp\htdocs\test_scripte\newfile.php(29): DB_Mysql->connect() #1 C:\xampp\htdocs\test_scripte\newfile.php(48): DB_Mysql->execute('SELECT * FROM `...') #2 {main} thrown in C:\xampp\htdocs\test_scripte\newfile.php on line 20



Dabei muss ich sagen das ich mit dem xampp (nur Apache Server und MySQL Datenbak) Arbeite.
Begreife aber nicht warum ich eine Warnung bezüglich der ODBC Datenbank bekomme :confused:

Kann mir jemand da Helfen ?
Brauche dringend Hilfe und wäre euch sehr dankbar, wenn ihr mir dabei Helfen könntet

Mit freundlichen Grüßen
Daniel
 
Das heisst, dass der Zugang verwehr wurde...Hast du den richtigen Benutzernamen und das richtige Passwort benutzt?

Ja habe ich.
Die gleiche MySQL abfrage habe ich mit mein selbst geschriebene Klasse gemacht und das funktioniert einwandfrei...

Nur bei diesem hier verstehe ich das nicht und würde mich echt sehr freuen, wenn ihr mir da helfen könntet...

Mit freundlichen Grüßen
Daniel
 
Ändere mal in
PHP:
__construct
um.

Juhuuu dankeschön für deine Hilfe...
Wie könnte ich das übersehen haben lol...

Okay die Warnung ist nicht mehr da aber ein FATAL ERROR besteht wie vorhin immer noch...

und zwar dieses hier:

Fatal error: Uncaught exception 'Exception' in C:\xampp\htdocs\test_scripte\newfile.php:33 Stack trace: #0 C:\xampp\htdocs\test_scripte\newfile.php(48): DB_Mysql->execute('SELECT * FROM `...') #1 {main} thrown in C:\xampp\htdocs\test_scripte\newfile.php on line 33

Kann mir jemand hierbei Helfen ?
Wäre euch sehr dankbar...

Mit freundlichen Grüßen
Daniel
 
Kann das sein das
PHP:
throw new Exception;
einen Parameter mit dem Nachrichtenstring benötigt. Also:
PHP:
throw new Exception("Fehler");
 
Fatal error: Uncaught exception 'Exception' in C:\xampp\htdocs\test_scripte\newfile.php:33 Stack trace: #0 C:\xampp\htdocs\test_scripte\newfile.php(48): DB_Mysql->execute('SELECT * FROM `...') #1 {main} thrown in C:\xampp\htdocs\test_scripte\newfile.php on line 33
Der Fehler sagt doch alles aus.

Du lässt zwar eine Ausnahme werfen, fängst diese aber nicht ab!
Versuchs mal so:
PHP:
try { 

    $dbh = new DB_Mysql("root", "", "localhost", "cordes");
    $query = "SELECT * FROM `tbl_login` WHERE `username` = 'admin';";
    $stmt = $dbh->execute($query);  

} catch(Exception $ex) {

    echo $ex->getMessage();

}
 
Der Fehler sagt doch alles aus.

Du lässt zwar eine Ausnahme werfen, fängst diese aber nicht ab!
Versuchs mal so:
PHP:
try { 

    $dbh = new DB_Mysql("root", "", "localhost", "cordes");
    $query = "SELECT * FROM `tbl_login` WHERE `username` = 'admin';";
    $stmt = $dbh->execute($query);  

} catch(Exception $ex) {

    echo $ex->getMessage();

}



Hm komisch, also in dem Buch wird diese try{ } catch(){} nicht erwähnt aber auch damit wird das problem nicht besser.
Bekomme zwar den FATAL ERROR nicht mehr aber nun zeigt der mir im Browser Fenster gar nichts an.

Wo genau liegt denn das problem ?
Und wieso nach deinem Try Methode bekomme ich kein richtige Fehlermeldung aus wo ich nachvollziehen kann was genau da los ist ?

Mit freundlichen Grüßen
Daniel
 
Zurück