代码之家  ›  专栏  ›  技术社区  ›  The.Anti.9

PHP自定义数据库接口类-未选择数据库

  •  0
  • The.Anti.9  · 技术社区  · 15 年前

    我编写了以下DB接口类:

    <?php
    
    // dbinterface.php
    
    class db {
        private $con;
        private $host;
        private $user;
        private $pass;
        private $database;
        private $error;
    
        function db($host, $user, $pass, $database) {
            $this->con = mysql_connect($host, $user, $pass);
            mysql_select_db($database);
        }
    
        function escape($text) {
            return mysql_real_escape_string($text);
        }
    
        function run($query) {
            $q = mysql_query($query);
            if ($q === false) {
                $this->error = "Error " . mysql_errno() . ": " . mysql_error($this->con);
                return false;
            } elseif ($q === true) {
                return true;
            } else {
                $result = array();
                while ($row = mysql_fetch_assoc($q)) {
                    array_push($result, $row);
                }
                return $result;
            }
        }
    
        function get_error() {
            return $this->error;
        }
    
        function cose() {
            mysql_close($this->con);
        }
    }
    
    
    ?>
    

    问题是,由于某种原因,当我试图用它运行查询时,我得到了错误:没有选择数据库。但我的代码在构造函数中选择它。我检查并确认我传递的数据库名称是正确的。我确定它已经通过了。

    2 回复  |  直到 15 年前
        1
  •  1
  •   soulmerge    15 年前

    您应该始终检查内置函数的返回值。尝试这样的方法,您可能会得到一个答案:

    function db($host, $user, $pass, $database) {
        if (($this->con = mysql_connect($host, $user, $pass)) === false) {
            throw new Exception(mysql_error());
        }
        if (!mysql_select_db($database)) {
            throw new Exception(mysql_error());
        }
    }
    
        2
  •  0
  •   Kane Wallmann    15 年前

    这门课对我来说很好…不过,您肯定应该做更多的错误检查。如果您指定了一个不存在的数据库,那么您可以得到“未选择数据库”错误,因此我将在下一步查找该数据库。

    编辑:测试mysql_select_db()的返回值,如果返回值不为真,则触发错误或引发异常。