在面向对象的PHP中重构代码,并在mysql查询中使用PDO


Refactoring code in OOP PHP and using PDO for mysql queries

我是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;
}

允许您使用占位符来表示查询

中的实际数据变量