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

时间:2009-07-21 08:01:24

标签: php mysql

我编写了以下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 个答案:

答案 0 :(得分:1)

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

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());
    }
}

答案 1 :(得分:0)

这个类对我来说很好......但你肯定应该做更多的错误检查。如果指定了一个不存在的数据库,那么你可以得到“No database selected”错误,这就是我接下来要看的地方。

编辑:测试mysql_select_db()的返回值并触发错误或如果它不返回true则抛出异常。