好的,所以我基本上都在努力改进PHP OOP,但是我不太清楚我应该怎么做。有人可以指出这个问题吗?
代码返回以下错误:
注意:未定义的属性:registration :: $ 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 :(得分:4)
错误说它找到了变量$ userExist,这是因为在最后一行你在“$ this”中寻找变量“$ userExist”,而你将它定义为正常变量,在它上面几行。 / p>
要解决此问题,请删除提供错误的行的this->
部分,以便从本地范围中获取变量
$rows = $userExist->fetch(PDO::FETCH_NUM);
修改强>
您在评论中说,在调用方法userExists()
之前,已正确定义变量$ username。但是,在调用php变量时,不会将它们复制到函数代码块的内部。要传递变量,您需要在函数中添加一个参数。
public function userExist($username){
...
$rows = $userExist->fetch(PDO::FETCH_NUM);
....
}
你需要像以下一样使用它:
....
$rows = $registration->userExist($username);
....
答案 1 :(得分:0)
这是因为您在课程dash
中没有属性1
。
只需更改
userExist
的
registration
答案 2 :(得分:0)
您不需要$ this-&gt; 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;
}