我是PHP中的OOP新手。我有一个问题,而我试图重构我的代码在OOP和PDO。当我尝试重构代码时,出现了这个问题。所以我有一个类别类来管理类别CRUD操作。要读取所有之前创建的类别,我有一个方法
public function readAll(){
$query = "SELECT * FROM " . $this->table_name . " ORDER BY modified ASC";
$stmt = $this->connection->prepare($query);
if($stmt->execute()){
return $stmt;
}
}
在construct函数的同一类中,我得到了db连接,如下
public function __construct(PDO $db){
$this->connection = $db;
}
我在我的页面中像这样调用read all方法-
$allCategories= $category->readAll();
,它工作得很好,但当我试图重构我的代码,使用一个新的函数,像这样-
private function doQuery($query){
$stmt = $this->connection->prepare($query);
if($stmt->execute()){
return $stmt;
}
}
public function readAll(){
$query = "SELECT * FROM " . $this->table_name . " ORDER BY modified ASC";
$this->doQuery($query);
}
我得到以下错误:
Fatal error: Call to a member function fetch() on a non-object in D:'xampp'htdocs'image-upload'category.php on line 222
所以我只是想节省我自己不得不写准备和执行语句,每次我做一个不同的查询。我正试图使我的代码干。我可能漏掉了什么。只要有一点正确的提示,我就非常感激。请帮帮我。
"提前致谢"
第二个readAll()方法没有返回任何结果。应该是
return $this->doQuery($query);
或者更确切地说,基于方法的名称
return $this->doQuery($query)->fetchAll();
获取一个包含所有选定行的数组。
除了这个小问题之外,doQuery()方法中有一个错误,使它完全无用。必须是
private function doQuery($query, $data = array()){
$stmt = $this->connection->prepare($query);
$stmt->execute($data);
return $stmt;
}
允许您使用占位符来表示查询