我正在尝试从我的索引文件连接到数据库,该文件具有我的登录表单。我已经创建了一个数据库实例,但是我收到了一个错误。
“致命错误:在第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";
}
}
}
答案 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";
}
}