2014-05-04 27 views
-1

我正在尝试使用以下代码的这些部分创建一个简单的用户注册类。 数据库文件在user.php类中是必需的,并且在使用prepared()方法之前也要实例化。但我仍然在这一行上得到一个未定义的方法db :: prepare() $stmt = $db->prepare ("INSERT INTO users (name, email) VALUES (:name, :email)");未定义方法db class被实例化后的prepare()错误

我在哪里出错了?

数据库类

require_once('tryerrors.php'); 

class db { 
    private $dsn = 'mysql:host=127.0.0.1;dbname=users'; 
    private $username = 'root'; 
    private $password = ''; 
    public $dbh; 

    public function __construct(){ 
     $this->conn(); 
    } 

    public function conn(){ 
     try { 
      $this->dbh = new PDO($this->dsn, $this->username, $this->password); 
      $this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
      $this->dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
      } catch (PDOException $e) { 
       $error = new Errors(); 
       echo $error->displayError($e); 
       } 
    } 

用户类别

require_once ('db.php'); 
class Users{ 
    public $dbh; 
    public function reg_user($name, $email) { 
     try{ 
     $db = new db; 
     $stmt = $db->prepare ("INSERT INTO users (name, email) VALUES (:name, :email)"); 
     $stmt->execute(array($name, $email)); 

    } catch (PDOException $e) { 
     $error = new Errors(); 
     echo "<b>".$error->displayError($e)."</b>"; 
    } 
    } 
    } 
    $reg = new Users; 
    $reg->reg_user('name', '[email protected]'); 

回答

2

您应该从$db对象访问dbh财产在你User类来获得一个数据库处理程序:

$db = new db; 
$stmt = $db->dbh->prepare ("INSERT INTO users (name, email) VALUES (:name, :email)"); 

或者你可以更改database__constructor

public function __construct(){ 
    return $this->conn(); 
} 

而且conn()方法:

public function conn(){ 
    try { 
     $this->dbh = new PDO($this->dsn, $this->username, $this->password); 
     $this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $this->dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
     return $this->dbh; 
     } catch (PDOException $e) { 
      $error = new Errors(); 
      echo $error->displayError($e); 
      } 
}