首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么会出现“数据库未选中”错误?

问为什么会出现“数据库未选中”错误?
EN

Stack Overflow用户
提问于 2013-12-28 03:31:40
回答 1查看 89关注 0票数 0

看看这段代码

代码语言:javascript
复制
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);

您只需要在所有的包含中从MySQLDatabase类中看到classes.php类,如下所示

代码语言:javascript
复制
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,并且得到了如下所示的错误:。

​

即使我在函数?中更改变量名,也仍然会出现此错误。

代码语言:javascript
复制
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);

我认为可能的解决办法:

在这段代码中,我试图建立两个parllel连接到数据库,一个使用$db对象,另一个使用$dbl对象,希望MySQL不可能建立两个parllel连接!

EN

回答 1

Stack Overflow用户

发布于 2013-12-28 04:45:52

您所遇到的问题与整个可变范围无关。PHP的变量范围是非常明确。

您的问题源于您在没有函数的第二个参数( "link“)的情况下在mysql_query中调用MySQLDatabase::query。虽然参数是可选的,但是根据文件

如果未指定链接标识符,则假定mysql_connect()打开的最后一个链接。

由于您上一次打开的数据库链接( do_something内部的链接)已关闭,因此在随后调用mysql_query时,PHP不再有一个数据库链接可引用。

尝试更新这一行:

代码语言:javascript
复制
$this->query_result = mysql_query($this->query);

要解释,请参考类中的数据库链接属性:

代码语言:javascript
复制
$this->query_result = mysql_query($this->query, $this->connection);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20810710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档