【问题标题】:undefined method prepare() error after db class was instantiated实例化db类后未定义的方法prepare()错误
【发布时间】:2014-05-04 00:01:44
【问题描述】:

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

我哪里错了?

数据库类

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', 'name@email.com');

【问题讨论】:

    标签: php mysql sql pdo prepare


    【解决方案1】:

    您应该从您的$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);
                }
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多