下面的错误类功能是否不完整/不正确?当查询不正确时,我永远不会收到任何错误消息,
#connects the database and handling the result
class __database {
protected $connection = null;
protected $error = null;
#make a connection
public function __construct($hostname,$username,$password,$database)
{
$this -> connection = new mysqli($hostname,$username,$password,$database);
if (mysqli_connect_errno())
{
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
}
#fetches all result rows as an associative array, a numeric array, or both
public function fetch_all($query)
{
$result = $this -> connection -> query($query);
if($result)
{
return $result -> fetch_all(MYSQLI_ASSOC);
}
else
{
$this -> error = $this -> connection -> error;
return $this -> error;
}
}
#display error
public function get_error()
{
return $this -> error;
}
#closes the database connection when object is destroyed.
public function __destruct()
{
$this -> connection -> close();
}
}
public function get_error()
在我的db类中似乎没用...我已经阅读了有关php Exception
的信息,但我不知道如何将其合并到上面的db类中!请指教...编辑:
我试图将代码更改为此,
# return the current row of a result set as an object
public function fetch_object($query)
{
$result = $this->connection->query($query);
if($result)
{
...
}
else
{
__database::get_error();
}
}
和错误类函数,
#display error
public function get_error()
{
$this->error = $this->connection->error;
return $this->error;
}
所以我认为它应该触发get_error()函数,但是错误函数仍然没有显示任何信息。
最佳答案
首先,如果您想充分利用mysqli类,则应该扩展它,并在需要时覆盖它。
class Database extends mysqli
{
public function __construct($host = null,$username= null,$password = null,$database = "",$port = null, $socket = null)
{
$host = $host !== null ? $host : ini_get("mysqli.default_host");
$username = $username !== null ? $username : ini_get("mysqli.default_user");
$password = $password !== null ? $password : ini_get("mysqli.default_pw");
$port = $port !== null ? $port : ini_get("mysqli.default_port");
$socket = $socket !== null ? $socket : ini_get("mysqli.default_socket");
/*
Perform any custom actions here!
*/
parent::__construct($host,$username,$password,$database,$port,$socket);
}
public function fetch_all($query) /*Overridden*/
{
if(false !== ($result = parent::query($query))) //run directly in mysqli
{
return $result->fetch_all(MYSQLI_ASSOC);
}
return false;
}
public function get_error()
{
if($this->errno || $this->error)
{
return sprintf("Error (%d): %s",$this->errno,$this->error);
}
}
}
这将允许mysqli处理错误并允许您轻松地访问它们,创建只模仿类的类没有意义,您最好扩展类本身。
其次,将代码间隔开是一种不好的做法,它不应影响php解释代码的方式,但是从长远来看,如果涉及到共享开发,它可能会使更多开发人员感到困惑并引起问题。
简单的例子:
$Database = new Database(null,"root","pass","database");
$Results = $Database->fetch_all("SELECT * from tabe_that_dont_exists");
if($Results === false)
{
echo $Database->get_error();
}
关于php - PHP : class display error function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5058217/