Also..ich bekomme folgenden Fehler: 
	
Ich kann mir das ganze auch erklären und zuordnen...
Die Methode DB_MySQL_Test->execute($query) sollte nicht aufgerufen werden, sondern die Methode DB_MySQL_Test_Statement->execute()..
Also der Code sieht folgendermaßen aus:
class.authenticate.php
	
dieser wird von index.php aufgerufen, dieser Code spielt aber keine Rolle, hier die beiden Klassen in einer Datei:
	
Die anderen eingebundenen Dateien sind halt nur die Exception-Handler...
Der sollte doch eigentlich aufgrund der Funktion DB_MySQL_Test->prepare($query) in DB_MySQL_Test_Statement springen und dann die execute-Methode ausführen... aber, ne...er zeigt mir lieber nen Query-String-Fehler an
Vllt findet ja jemand den Fehler...
Danke im Vorraus, Dennis
P.S.: Falls jemand den ganzen Code haben möchte...schreiben...falls sich jemand über die komischen require_once-Aufrufe wundert... wir verwenden eine zentrale Datei, wo Passwörter, Pfade und Einstellungen gespeichert sind und die auch dort als Konstanten definiert werden...
					PHP Code:
	
	
Fatal error: Uncaught exception 'MysqlException' with message 'You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near 
'email' at line 1' in D:\\Programme\\Zend\\Apache2\\htdocs\\lib\\database\\mysql\\test\\class.mysql_test.php:58 Stack trace:#0
D:\\Programme\\Zend\\Apache2\\htdocs\\lib\\authentication\\class.authenticate.php(6):
DB_MySQL_Test->execute('email', 'looser') #1
D:\\Programme\\Zend\\Apache2\\htdocs\\index.php(20): Authentication::check_credentials('email', 'looser') #2 {main} thrown in
D:\\Programme\\Zend\\Apache2\\htdocs\\lib\\database\\mysql\\test\\class.mysql_test.php on line 58 
Die Methode DB_MySQL_Test->execute($query) sollte nicht aufgerufen werden, sondern die Methode DB_MySQL_Test_Statement->execute()..
Also der Code sieht folgendermaßen aus:
class.authenticate.php
PHP Code:
	
	
<?php
class Authentication {
    static function check_credentials($name, $password) {
        $dbh = new DB_MySQL_Test;
        $query = "SELECT user_id FROM cm_users WHERE user_mail = :1 AND user_pass = :2";
            $cur = $dbh->prepare($query)->execute($name, $password);
            $row = $cur->fetch_assoc();
            if($row) {
                $userid = $row['user_id'];
            }
            else {
                throw new AuthException("User is not authorized!");
            }
            return $userid;
    }
}
?>
PHP Code:
	
	
<?php
class DB_MySQL_Test {
    protected $db_user;
    protected $db_pass;
    protected $db_host;
    protected $db_name;
    protected $dbh;
    public function __construct(){
        $this->user = DB_USER;
        $this->pass = DB_PASS;
        $this->host = DB_HOST;
        $this->name = DB_NAME;
    }
    protected function connect(){
        $this->dbh = mysql_connect($this->host, $this->user, $this->pass);
        if(!is_resource($this->dbh)){
            require_once(FS_LIB_ROOT.DS.'database'.DS.'mysql'.DS.'mysql_exception.php');
            throw new MysqlException;
        }
        if(!mysql_select_db($this->name, $this->dbh)){
            require_once(FS_LIB_ROOT.DS.'database'.DS.'mysql'.DS.'mysql_exception.php');
            throw new MysqlException;
        }
    }
    public function execute($query){
        if(!$this->dbh){
            $this->connect();
        }
        $ret = mysql_query($query, $this->dbh);
        if(!$ret){
            require_once(FS_LIB_ROOT.DS.'database'.DS.'mysql'.DS.'mysql_exception.php');
            throw new MysqlException;
        }
        elseif(!is_resource($ret)){
            return TRUE;
        }
        else {
            $stmt = new DB_MySQL_Test_Statement($this->dbh, $query);
            $stmt->result = $ret;
            return $stmt;
        }
    }
    public function prepare($query){
        if(!$this->dbh){
            $this->connect();
        }
        return new DB_MySQL_Test_Statement($this->dbh, $query);
    }
}
class DB_MySQL_Test_Statement {
    protected $result;
    protected $binds;
    public $query;
    protected $dbh;
    public function __construct($dbh, $query){
        $this->query = $query;
        $this->dbh = $dbh;
        if(!is_resource($dbh)){
            require_once(FS_LIB_ROOT.DS.'database'.DS.'mysql'.DS.'mysql_exception.php');
            throw new MysqlException("Not a valid database connection");
        }
    }
   
    public function bind_param($ph, $pv){
        $this->binds[$ph] = $pv;
    }
  
    public function execute($query){
        $binds = func_get_args();
        foreach ($binds as $index => $name){
            $this->binds[$index + 1] = $name;
        }
        $cnt = count($binds);
        $query = $this->query;
        foreach ($this->binds as $ph => $pv){
            $query = str_replace(":$ph", "'".mysql_escape_string($pv)."'", $query);
        }
        $this->result = mysql_query($query, $this->dbh);
        if(!$this->result){
            require_once(FS_LIB_ROOT.DS.'database'.DS.'mysql'.DS.'mysql_exception.php');
            throw new MysqlException;
        }
    }
  
    public function fetch_row(){
        if(!$this->result){
            require_once(FS_LIB_ROOT.DS.'database'.DS.'mysql'.DS.'mysql_exception.php');
            throw new MysqlException("Query not executed");
        }
        return mysql_fetch_row($this->result);
    }
   
    public function fetch_assoc(){
        return mysql_fetch_assoc($this->result);
    }
   
    public function fetchall_assoc(){
        $retval = array();
        while($row = $this->fetch_assoc()){
            $retval[] = $row;
        }
        return $retval;
    }
}
?>
Der sollte doch eigentlich aufgrund der Funktion DB_MySQL_Test->prepare($query) in DB_MySQL_Test_Statement springen und dann die execute-Methode ausführen... aber, ne...er zeigt mir lieber nen Query-String-Fehler an

Vllt findet ja jemand den Fehler...
Danke im Vorraus, Dennis
P.S.: Falls jemand den ganzen Code haben möchte...schreiben...falls sich jemand über die komischen require_once-Aufrufe wundert... wir verwenden eine zentrale Datei, wo Passwörter, Pfade und Einstellungen gespeichert sind und die auch dort als Konstanten definiert werden...
EDIT: 
Das Forum schluckt ja die Backslashes...... egal...hab's korrigiert ... oder eben auch nicht
![]()
auch die Breite angepasst
          

??
							
						
Comment