【问题标题】:How to handle database instances with PDO如何使用 PDO 处理数据库实例
【发布时间】:2012-03-16 19:39:24
【问题描述】:

我正在开发一个小型网络项目管理应用程序。 我有一些类,如 Clients()、Services()、Projects() 等。 每个类都包含 getClient()、newClient()、editClient() 等方法,并且这些方法中的每一个都需要数据库连接。我添加了一个额外的 PDO 类。

我的客户类的当前代码:

<?php
// include database class
require_once('../../../lib/php/classes/database/database.class.php');

class Client {

    public function getClient() {
        $db = Database::get("default");
        $clients = $db->select("SELECT * FROM clients ORDER BY name ASC");
        return $clients;
    }

    public function newClient($values) {
        $db = Database::get("default");
        if ($db->insert("INSERT INTO clients (name,initial,payment,hourly_rate,active) VALUES (?,?,?,?,?)",$values)) {
        } else {
            print "Inserting failed";
        }
    }

}
?>

但我认为这没有任何意义。我怎样才能做得更好?第一个想法:构造方法,连接到数据库。

【问题讨论】:

  • codereview.stackexchange.com 的候选人可能吗?
  • 这确实属于 codereview.stackexchange.com(不幸的是,没有投票选项可以移至 codereview)

标签: php mysql class pdo


【解决方案1】:

现在似乎每个人都喜欢依赖注入,这将使您的数据库对象与 Client 类分离。

class Client {

    private $db = null;

    public function __construct($db) {
        $this->db = $db;
    }
    public function getClient() {
        $clients = $this->db->select("SELECT * FROM clients ORDER BY name ASC");
        return $clients;
    }

    public function newClient($values) {
        if ($this->db->insert("INSERT INTO clients (name,initial,payment,hourly_rate,active) VALUES (?,?,?,?,?)",$values)) {
        } else {
            print "Inserting failed";
        }
    }
}

【讨论】:

  • 非常感谢!但是我应该在哪里创建新的 DB Objekt (Database::get("default");)?
  • 您可能需要做一些小调整,在构造函数中键入提示 $db 变量。这样你就可以确定 $db 实际上是一个数据库对象,而不是别的东西。
猜你喜欢
  • 1970-01-01
  • 2018-09-12
  • 1970-01-01
  • 1970-01-01
  • 2019-05-04
  • 2017-10-19
  • 2014-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多