以下是我的问题的解决方案。我的班级写错了。我不小心用了#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");
答案 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);