PHP扩展MySQL主类TWICE

时间:2015-04-15 10:31:56

标签: php mysql database-connection

以下是我的问题的解决方案。我的班级写错了。我不小心用了#34; die"我的主数据库类中的函数使我的所有查询失败。我正在追查错误的问题。

我希望你们发现这个类示例很有用。它很干净,对于在多个数据库的单个位置包装SQL调用非常有用。通过允许扩展,您可以更轻松地跟踪您的名字。

class A extends DB {

    protected $connection;

    function __construct()
    {
        $this->db_host      = "server.com:3327";
        $this->db_name      = "db_name_one";
        $this->db_username  = "root";
        $this->db_password  = 'pw';

        // .. equals all the setup vars
        parent::__construct();
    }   

}

class B extends DB {

    function __construct()
    {
        $this->db_host      = "server.com:3327";
        $this->db_name      = "db_name_two";
        $this->db_username  = "root";
        $this->db_password  = 'pw';

        // .. equals all the setup vars
        parent::__construct();
    }   

}

class DB {

    function __construct()
    {
        $this->connect()
    }
    public function connect()
        if (!$connection = @ mysql_connect ($this->db_host,$this->db_username,$this->db_password,$this->second_flag))
            die ('I cannot connect to the database because: ' . mysql_error());

        if (!mysql_selectdb($this->db_name,$connection))
            $this->showerror();

        return $connection;
    }   
    public function executeSQL($query)
    {
        $results =  mysql_query($query,$this->connection); 

        if (!$results) {
            die(...);
        }

        return $results;
    }
}

$db1 = new A();
$db2 = new B();

$db1->executeSQL("select * from table");

1 个答案:

答案 0 :(得分:0)

我不知道在这里扩展DB课程是否合法。除非那些扩展类添加到DB(例如,它们将其适应不同的数据库),否则它们与DB无关。仅仅因为他们使用 DB并不意味着他们应该extend一个。

最简单的方法是:创建一个处理数据库交互的类。当您创建该类的新实例时,它会建立与数据库的新连接。这样,您可以拥有任意数量的独立连接。然后,您只需将这些实例传递给任何需要它们的人:

class DB {

    protected $connection;

    public function __construct() {
        $this->connection = mysql_connect(..);
        if (!$this->connection) {
            throw new Exception(..);
        }
    }

    ..

}


class A {

    protected $db;

    public function __construct(DB $db) {
        $this->db = $db;
    }

    ..

}


$db = new DB;
$a  = new A($db);