致命错误:在第18行的C:\ wamp \ www \ motor-house \ public_html \ User.class.php中的非对象上调用成员函数prepare()

时间:2014-03-09 17:23:02

标签: php mysql pdo

我正在尝试从我的索引文件连接到数据库,该文件具有我的登录表单。我已经创建了一个数据库实例,但是我收到了一个错误。

“致命错误:在第18行的C:\ wamp \ www \ motor-house \ public_html \ User.class.php中的非对象上调用成员函数prepare()”

我的数据库类代码是:

class Connection{

    public function Connect(){
        try{
            $handler = new PDO('mysql:host=127.0.0.1;dbname=cars', 'root', '');
            $handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        }catch(PDOException $e){
            echo $e->getMessage();
            die();
        }   

        echo "rest of script";
    }

    }

我的用户类代码:

include_once("db.class.php");

class User{
    private $db;

    //make the connection
    public function __construct(){
        $this->db = new Connection();
        $this->db = $this->db->Connect();
    }

    //Login 
    public function Login($username, $password){
        $query = $this->db->prepare("SELECT * FROM users");
        $query = bindParam(1, $username);
        $query = bindParam(2, $password);
        $query->execute();

        if($query->rowCount() == 1){
            echo "Granted";
        }else{
            echo "Check credentals again";
        }
    }
}

2 个答案:

答案 0 :(得分:0)

@Mat是正确的。您正在实例化一个新对象并将其分配给此行上的属性$db

    $this->db = new Connection();

但是你在下一行中重写了这个任务:

    $this->db = $this->db->Connect();

因此,您不再拥有包含方法prepare()的实例化对象。

将其更改为:

//make the connection
public function __construct(){
    $this->db = new Connection();
    $this->db->Connect();
}

答案 1 :(得分:0)

我设法解决了这个问题。我的代码是正确的,但是我在数据库类中唯一缺少的是return关键字。

之前的代码: class Connection {

public function Connect(){
    try{
        $handler = new PDO('mysql:host=127.0.0.1;dbname=cars', 'root', '');
        $handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }catch(PDOException $e){
        echo $e->getMessage();
        die();
    }   

    echo "rest of script";
}


}

之后的代码:

class Connection {

public function Connect(){
    try{
        return $handler = new PDO('mysql:host=127.0.0.1;dbname=cars', 'root', '');
        $handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }catch(PDOException $e){
        echo $e->getMessage();
        die();
    }   

    echo "rest of script";
}


}
相关问题