【问题标题】:Refactoring code in OOP PHP and using PDO for mysql queries在 OOP PHP 中重构代码并使用 PDO 进行 mysql 查询
【发布时间】:2015-12-25 11:57:59
【问题描述】:

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

所以我只想让自己不必在每次进行不同查询时都编写准备和执行语句。我正在尝试使我的代码干燥。我可能会遗漏一些东西。高度赞赏在正确方向上的轻微提示。请帮我。

“提前致谢”

【问题讨论】:

    标签: php mysql oop pdo


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢先生。它解决了我的问题。我还想问你的一件事是,在 PDO 的 execute 方法中传递一个数组是否可以,或者我应该使用 bindParam 和 bindValue,因为传递一个数组对我来说似乎更方便。
    • 如果这解决了您的问题,您应该标记这是最佳答案
    • 你好 JammyDodger231。我今天在stackoverflow中创建了帐户,我不熟悉如何做你所说的。您能否告诉我如何将其标记为最佳答案,因为我看不到任何选项。原谅我的无知
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    相关资源
    最近更新 更多