致命错误:在非对象上调用成员函数prepare()

时间:2013-03-26 07:47:39

标签: php pdo

好吧我从我的用户名存在函数中得到错误。 这是寄存器功能。

public function register($username, $upassword){
    if(!$this -> exists($username)) {
        $salt = $this->salt();
        $date = date('Y-m-d');
        $password = $this->md5($upassword, $salt);

        $SQL = $this -> db -> prepare("INSERT INTO `user` (username, password, salt, created_at) VALUES(:username, :password, :salt, :date)");
        $SQL -> execute(array(':username' => $username, ':password' => $password, ':salt' => $salt,':date' => $date));
    return TRUE;
  } else {
      return FALSE;
  }
} 

错误似乎来自此行中的prepare语句。

public function exists($username){
       $SQL = $this -> db -> prepare("SELECT COUNT(*) FROM `user` WHERE `username` = :username");
       $SQL -> execute(array(':username' => $username ));
       $count = $SQL -> fetchcolumn(0);
       if($count > 0) {
           return TRUE;
       } else {
           return FALSE;
       }
   }

获取错误: 致命错误:在第41行的functions.php中调用非对象的成员函数prepare()

哪个是存在函数中的第一行?

有人可以帮我吗?

2 个答案:

答案 0 :(得分:0)

exists()类没有'看到'你的$ this-> db,尝试调试它,如果它真的是引用或者可以在exists()类中使用

答案 1 :(得分:0)

如果你试图像这样实例化你的类:new ClassName($db)那么$this->db很可能没有被定义,因为你实际上没有为你的类定义一个构造函数,它对{{{{{ 1}}。

$this->db应为_construct($db)

假设你想要构造函数魔术方法。所有魔术方法都以两个下划线开头。