看一下这段代码
include_once("includes/config.php");
include_once("includes/classes.php");
include_once("includes/functions.php");
$db = new MySQLDatabase();
function do_something(){
$db = new MySQLDatabase();
unset($db);
}
do_something();
$db->query = "SELECT * FROM users";
$db->query();
$result = $db->fetch_array();
var_dump($result);
echo"</pre>";
unset($db);
你只需要看看所有包含中的classes.php中的MySQLDatabase类,这里就是
class MySQLDatabase{
public $query = "";
private $last_query = "";
private $query_result;
private $connection;
function __construct(){
$this->connection = mysql_connect(DB_SERVER,DB_USER_NAME,DB_PASSWORD);
$db_select = mysql_select_db(DB_NAME,$this->connection);
if((!$this->connection) || (!$db_select)){
die("can't connect to database<br/> ERROR : ".mysql_error());
}
}
public function get_last_query(){
return $this->last_query;
}
private function escape_query(){
mysql_real_escape_string($this->query);
}
public function query(){
$this->escape_query();
$this->query_result = mysql_query($this->query);
$this->check_result();
$this->last_query = $this->query;
return $this->query_result;
}
private function check_result(){
if(!$this->query_result){
die("mysql query failed<br/>query :".$this->query."<br/> Eror :".mysql_error()."<br>".$this->last_query."<br>");
} else{
return 1;
}
}
public function fetch_array(){
$ass_array = array();
while($temp = mysql_fetch_array($this->query_result)){
array_push($ass_array,$temp);
}
return $ass_array;
}
public function num_rows(){
if(is_bool($this->query_result)){
return $this->query_result;
} else{
return mysql_num_rows($this->query_result);
}
}
public function affected_rows(){
//return mysql_affected_rows($this->query_result);
if(is_bool($this->query_result)){
return $this->query_result;
} else{
return mysql_affected_rows($this->query_result);
}
}
public function close_connection(){
mysql_close($this->connection);
}
function __destruct(){
$this->close_connection();
}
}
我的问题是 当我尝试创建一个MySQLDatabase($ db)类的新对象时,为什么它会搞乱全局$ db,我的意思是在未设置($ db)的时候它正在取消全局$ db并且我得到了错误如此处所示
即使我在功能中更改变量名称,这个错误仍然会出现?
include_once("includes/config.php");
include_once("includes/classes.php");
include_once("includes/functions.php");
$db = new MySQLDatabase();
function do_something(){
$dbl = new MySQLDatabase();
unset($dbl);
}
do_something();
$db->query = "SELECT * FROM users";
$db->query();
$result = $db->fetch_array();
var_dump($result);
echo"</pre>";
unset($db);
我认为可能的解决方案:
在这段代码中,我试图使用$ db对象和另一个使用$ dbl对象进行数据库连接,可能是不可能与MySQL建立两个parllel连接!
答案 0 :(得分:0)
您遇到的问题与一般的变量范围无关。 PHP的变量范围是very well-defined。
你的问题源于你在MySQLDatabase::query
中调用mysql_query
而没有函数的第二个参数(“链接不确定”)。参数 是可选的,according to the documentation:
如果未指定链接标识符,则假定
mysql_connect()
打开的最后一个链接。
由于您上次打开的数据库链接do_something
内的数据库链接已关闭,因此PHP不再具有数据库链接,以便在后续调用mysql_query
时引用。
尝试更新此行的更新:
$this->query_result = mysql_query($this->query);
要明确指出类中的数据库链接属性:
$this->query_result = mysql_query($this->query, $this->connection);