在OOP PHP中重构代码并使用PDO进行mysql查询

时间:2015-09-28 09:29:01

标签: php mysql oop pdo

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

在构造函数的同一个类中,我得到了像我这样的数据库连接

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

所以我只想在每次进行不同的查询时都不必编写准备和执行语句。我想让我的代码干掉。我可能会遗漏一些东西。正确的方向略有提示,非常感谢。请帮我。

“感谢提前”

1 个答案:

答案 0 :(得分:3)

你的第二个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;
}

允许您使用占位符来表示查询中的实际数据变量