编写易于替换的php数据库类

时间:2013-03-23 11:57:58

标签: php database class

我正在开发一个需要一些数据库交互的小型PHP应用程序。这一切都很好,直到我达到多功能性和集成的程度,因为我希望应用程序易于在其他网站中实现。

我担心的是,将两个数据库类并排运行是一个好习惯,因为我的应用程序将集成在其中的网站可能拥有其中一个。这里有一个很大的问题:(或者我应该怎么做?)以这样的方式创建数据库类,以便用另一个替换它很容易。

到目前为止,我的想法要么

  • 只使用我自己的类,以便用户可以定义他的数据库连接

  • 使用一些常规函数命名规则创建类,例如$this->db->Query(); $this->db->fetchAll(),因此它很容易扩展,并且函数可以被原生网站替换。

我保持班级很小,功能很少,但我仍然很难知道如何创建它以使它尽可能地开发友好。

谢谢,
微米。

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

“将两个数据库类并排运行是一个好习惯吗?”不,它没有意义......?

我会使用一个特定的DB类,可以很容易地转移到另一个站点。我会使用PDO对象来实现这一点。 settings.ini应存储在webroot之外,因为登录凭据等存储在那里。

<?php
class DB_Instance
{
    private static $db;

    public static function getDBO()
    {
        global $dbSettings;
        global $dsn;
        global $user;
        global $password;

        if (!self::$db)

            //Get connection parameters from ini-file
            $dbSettings = parse_ini_file('settings.ini', true);
            $dsn = 'mysql:dbname=' . $dbSettings['database']['name'] . ';host=' . $dbSettings['database']['host'];
            $user = $dbSettings['database']['user'];
            $password = $dbSettings['database']['password'];

            try {   
                $dbh = new PDO($dsn, $user, $password, array(PDO::ATTR_PERSISTENT => TRUE));
            } catch (PDOException $e) {
                echo 'Connection failed: ' . $e->getMessage();
            }
            $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
            $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $dbh->exec("set names utf8");
            self::$db = $dbh;

        return self::$db;
    }
}
?>

然后通过这样的类访问:

<?php
class Language {
    private $languageId;                //Language identifier
    private $language;                  //Which language
    private $dbInstance;                //DBInstance

    public function __construct($languageId = null) {
        $this->dbInstance = DB_Instance::getDBO();
....

然后执行如下函数:

$statement = $dbInstance->{PDO function}

有关PDO Class的更多信息,请查看:http://www.php.net/manual/en/class.pdo.php