2

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

我担心的是,让两个数据库类并排运行是否是一种好习惯,因为我的应用程序将集成到的网站可能有它自己的一个。这是一个大问题,如何(甚至我应该?)以这样一种方式制作数据库类,以便很容易用另一个替换它。

到目前为止,我的想法是

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

或者

  • 使用一些通用的函数命名规则创建类,$this->db->Query(); $this->db->fetchAll()这样它很容易扩展,并且这些函数可以被网站本地的函数替换。

我将班级保持在很小的规模,功能很少,但我仍然对如何创建它以使其尽可能地对开发人员友好感到困惑。

谢谢,
M。

4

2 回答 2

0

以下是最流行的 php 数据对象接口:

  1. MySQLi - 内置 PHP 数据库接口
  2. PDO - 内置 PHP 数据对象
  3. 推进
  4. 教义
  5. PHP 活动记录
于 2013-03-24T19:21:01.083 回答
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 类的更多信息,请查看:http ://www.php.net/manual/en/class.pdo.php

于 2013-03-24T23:43:03.137 回答