2015-04-22 31 views
0

好吧,所以我基本上试图用PHP OOP来改进,但是我不太确定我应该怎么做。有人能指出这个问题吗?PHP OOP,未定义的属性。我怎样才能使这个工作?

的代码返回以下错误:

说明:未定义的属性:登记:: $ userExist 致命错误:调用一个成员函数fetch()方法的非对象上

类:

class registration extends connect{ 

     public function userExist(){ 
      global $dsn; 

     $userExist = $this->dsn->prepare(" 
      SELECT * FROM accounts 
      WHERE username= :username 
      "); 

$userExist->bindParam(':username', $username); 
      $userExist->execute(); 

     $rows = $this->userExist->fetch(PDO::FETCH_NUM); 
      return $rows; 
     } 

如何,我想使用这个类在页面上:

$conn = new connect(); 
$registration = new registration(); 

$rows = $registration->userExist(); 
        if($rows < 1){ 
// do something 
+0

您没有使用'$ this'上全局变量。 – frz3993

+0

是的,但是你知道它不工作的原因吗? – Exhibitioner

+0

我可以猜测。没有足够的信息看到。当准备失败时,它不会返回一个对象。所以你的'$ userExist'不会是一个对象。当它不是一个对象时,它没有任何属性。在这种情况下,'fetch'。 – frz3993

回答

1

错误说它无法找到变量$ userExist,这是因为在最后一行中,您在“$ this”中查找变量“$ userExist”,而将其定义为其上方几行的正常变量。

要解决此问题,删除,让错误的行的this->部分,因此它从局部范围拿起变量

$rows = $userExist->fetch(PDO::FETCH_NUM); 

编辑 您的评论说,变量$的用户名是在您调用方法userExists()之前正确定义。但是,在变量被调用时,变量不会被复制到函数代码块的内部。要传递变量,你需要为函数添加一个参数。

public function userExist($username){ 
     ... 
     $rows = $userExist->fetch(PDO::FETCH_NUM); 
     .... 
    } 

而且你需要使用它,如:

.... 
$rows = $registration->userExist($username); 
.... 
+0

现在我得到致命错误:带有消息'SQLSTATE [23000]的未捕获异常'PDOException':违反完整性约束:1048'用户名'列不能为空' – Exhibitioner

+0

您确定您的函数被调用时定义了$ username吗? 'var_dump($ username)'查看它是否正确填充? – Ferrybig

+0

我在$ rows = $ registration-> userExist();上方添加了var转储。并显示字符串“Bob” – Exhibitioner

0

这是因为你没有一个属性userExist在类registration

只要改变

$rows = $this->userExist->fetch(PDO::FETCH_NUM); 

$rows = $userExist->fetch(PDO::FETCH_NUM); 
0

你不需要$这个 - > userExist

class registration extends connect{ 
    public function userExist(){ 
     global $dsn; 
     $this->dsn = $dsn; // assign global $dsn to $this->dsn 
     $userExist = $this->dsn->prepare("SELECT * FROM `accounts` WHERE `username`= :username"); 
     $userExist->bindParam(':username', $username); 
     $userExist->execute(); 
     $rows = $userExist->fetch(PDO::FETCH_NUM); 
      return $rows; 
     } 
相关问题