我编写了以下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);
}
}
?>
问题是,由于某种原因,当我尝试使用它运行查询时,我收到错误:没有选择数据库。但我的代码在构造函数中选择它。我检查并确保我传递了正确的数据库名称。我确定它实际上已经过去了。
答案 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则抛出异常。