我有两个类,它们都是从SQL类扩展的
像这样:class SQL {
private $db_connect_id;
function connect($ad, $db, $us, $pa){
$this->db_connect_id = mssql_connect($ad, $us, $pa);
mssql_select_db ($db, $this->db_connect_id) or die('sql error');
}
function sql_query($query = ""){
unset($this->query_result);
if($query != ""){
$this->num_queries++;
$this->query_result = @mssql_query($query, $this->db_connect_id) or die('error query');
}
if($this->query_result){
unset($this->row[$this->query_result]);
unset($this->rowset[$this->query_result]);
return $this->query_result;
}
}
}
class WEB extends SQL {
function __construct(){ $this->connect(params) }
function __destruct(){ $this->disconnect() }
}
class AUTH extends SQL {
function __construct(){ $this->connect(params) }
function __destruct(){ $this->disconnect() }
}
问题是,如果我同时打电话给他们两个
$WEB = new WEB();
$AUTH = new AUTH();
$WEB
将不再有效。它失去了与数据库的连接,它使用来自AUTH ...的db_connect_id更改db_connect_id
我认为这是一个愚蠢的问题,我太累了,但我必须完成。
我做错了什么?
谢谢
答案 0 :(得分:3)
http://php.net/manual/en/function.mssql-connect.php
第四个参数new_link
必须作为true
传递(因为默认为false
)。
答案 1 :(得分:1)
从你发布的有限代码中无法分辨,但我认为很明显你会发生一些类似单身的行为,即SQL
及其子类的所有实例都在共享引用。 / p>
如果您使用实际代码替换bla bla
,我们可以为您缩小范围。
答案 2 :(得分:1)
您的问题中提供的代码没有任何问题。
您所描述的问题是使用SQL类的静态属性,可能是为了保存数据库连接资源。
静态属性在类的所有实例之间共享,这是您似乎要描述的行为。
此类设计将按照您的方式运作:
class SQL {
private $database;
function connect() {
$this->datavbase = ....;
};
}
class WEB extends SQL {
function __construct(){ $this->connect(params) }
function __destruct(){ $this->disconnect() }
}
class AUTH extends SQL{
function __construct(){ $this->connect(params) }
function __destruct(){ $this->disconnect() }
}
此类设计将不以您想要的方式工作:
class SQL {
private static $database;
function connect() {
$this->datavbase = ....;
};
}
class WEB extends SQL {
function __construct(){ $this->connect(params) }
function __destruct(){ $this->disconnect() }
}
class AUTH extends SQL{
function __construct(){ $this->connect(params) }
function __destruct(){ $this->disconnect() }
}