我正在尝试为CRUD创建一个查询类,并希望扩展其他类的连接,但是我得到一个错误:致命错误:在非对象上调用成员函数prepare()! 我想念的是什么?或者只是stupito扩展它?
这里我的MYsql_connection扩展到了Querys类。两者都是不同的php文件。
class Mysql_connection extends Querys
{
protected $dbh = null;
function __construct()
{
try
{
$this->dbh = new PDO('mysql:host=host; dbname=db','user','pass', array(PDO::MYSQL_ATTR_INIT_COMMAND=> 'SET NAMES utf8'));
$this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->dbh->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
}
catch(PDOException $e)
{
$this->dbh = null;
print('Error on connection'.$e->getMessage());
die();
}
}
}
这是一个Query类
class Querys{
function getData()
{
$sql = "SELECT * FROM db";
$result = $dbh->prepare($sql);
$result = execute();
$data = $result->fetch(PDO::FETCH_ASSOC);
return = $data;
}
}
答案 0 :(得分:0)
您需要致电
$this->dbh->prepare($sql);
而不是
$dbh->prepare($sql);
您还需要替换
return = $data;
与
return $data;
此外,Mysql_connection extends Querys
对inheritance的使用不正确。 A extends B
表示A
是B
的子类型。
使用真实示例,Dog
可以是Animal
的子类型。因为狗是动物,对吗?所以Dog extends Animal
是正确的。
但是,Connection
不是Query
!
我强烈建议您阅读一些有关继承和面向对象编程的内容。 ;)