我正在尝试学习OOP,目前正在重写使用登录。我一直收到错误说:
Fatal error: Call to a member function prepare() on a non-object in /var/www/new.php on line 22
有人可以指出我做错了什么吗?除了明显的错误之外,这看起来像是一个好的OOP编码实践吗?
<?php
ini_set('display_errors', TRUE);
require 'resources/library/DB.php';
class DataBase
{
private $conn = null;
public function __construct($conn)
{
$this->conn = $conn;
}
public function setConn($conn)
{
$this->conn = $conn;
return $this;
}
public function retrievePassword($userNAme)
{
$stmt = $this->conn->prepare('SELECT `password` FROM `users` WHERE `userName`= :userName');
$stmt->bindValue(':userName', $userNAme);
$stmt->execute();
$salt = $stmt->fetchColumn();
return $salt;
}
}
$db = new DataBase($conn);
echo $db->retrievePassword('testuser');
?>
答案 0 :(得分:3)
您的构造函数不正确。
正确的PHP构造函数是
__构建体。
因此,当您调用新数据库($ pdo)时,它使用默认构造函数 - 它不进行赋值。
答案 1 :(得分:0)
您没有将 $conn
传递给 retrievePassword()
。
所以它可能不知道 conn
是什么。