Php 在mysql错误方法中没有错误retuns
我有一个php/mysql数据库类,如下代码所示。当mysql查询中出现错误时,我无法从error方法中获取任何mysql错误。如果这里有什么不对劲,请引导我。如果我使用非oop方法来查询相同的东西,那么我可以从中得到预期的错误。但这门课什么都没有Php 在mysql错误方法中没有错误retuns,php,mysql,Php,Mysql,我有一个php/mysql数据库类,如下代码所示。当mysql查询中出现错误时,我无法从error方法中获取任何mysql错误。如果这里有什么不对劲,请引导我。如果我使用非oop方法来查询相同的东西,那么我可以从中得到预期的错误。但这门课什么都没有 class db { protected static $connection; var $hostname; var $username; var $password; var $database;
class db {
protected static $connection;
var $hostname;
var $username;
var $password;
var $database;
public function __construct() {
$this->hostname = "localhost";
$this->username = "root";
$this->password = "";
$this->database = "my_db";
}
public function connect() {
if(!isset(self::$connection)) {
self::$connection = new mysqli($this->hostname,$this->username,$this->password,$this->database);
}
// If connection was not successful, handle the error
if(self::$connection === false) {
// Handle error - notify administrator, log to a file, show an error screen, etc.
return false;
}
self::$connection -> query("SET NAMES 'utf8'");
return self::$connection;
}
public function query($query) {
// Connect to the database
$connection = $this -> connect();
// Query the database
$result = $connection -> query($query);
return $result;
}
public function multi_query($query){
// Connect to the database
$connection = $this -> connect();
// Query the database
$result = $connection -> multi_query($query);
return $result;
}
public function insert($query) {
// Connect to the database
$connection = $this -> connect();
// Query the database
$connection -> query($query);
// Get inserted id
$insertid = $connection -> insert_id;
return $insertid;
}
public function select($query) {
$rows = array();
$result = $this -> query($query);
if($result === false) {
return false;
}
while ($row = $result -> fetch_assoc()) {
$rows[] = $row;
}
return $rows;
}
public function num_rows($query) {
$result = $this -> query($query);
if($result === false) {
$count = 0;
}
else $count = $result->num_rows;
return $count;
}
/**
* Fetch the last error from the database
*
* @return string Database error message
*/
public function error() {
$connection = $this -> connect();
return $connection -> error;
}
/**
* Quote and escape value for use in a database query
*
* @param string $value The value to be quoted and escaped
* @return string The quoted and escaped string
*/
public function escape($value) {
$connection = $this -> connect();
return $connection -> real_escape_string(trim($value));
}
}
我期待这个方法会出现错误。但当mysql查询出错时,我并没有得到任何错误
public function error() {
$connection = $this -> connect();
return $connection -> error;
}
下面的示例表有,id(自动递增)和其他三个字段VARCHAR(3)。如果我在php下面运行,则不会出现错误详细信息,即使查询的各个部分中的列数明显不匹配
<?php
include('class.db.php');
$query = "INSERT INTO abc_table (`a`,`b`,`c`) VALUES ('a','b','c','d')";
$insert_id = $db->insert($query);
if($insert_id>0){
echo "Insert Success !";
}
else echo "Insert Failed. ".$db->error();
?>
尝试将此代码放在.htaccess
文件中
php_flag display_startup_errors on
php_flag display_errors on
我可以通过将这个添加到类文件中的error()方法来解决这个问题
return self::$connection -> error;
所以,我的错误方法是
public function error() {
return self::$connection -> error;
}
旁注;很高兴看到一个像样的OOP'er正在进行,你应该拿起PSR-1/PSR-2让它发光。另外,您可以只$this->connect()->real_escape_string(trim($value))
没有设置冗余变量的点if(self::$connection==false){
->if(self::$connection->connect_error)
然后您可以检查self::$connection->connect\u errno
以给出更细粒度的原因,例如1049表示连接成功,但数据库不存在$query=self::$connection->query(…)
然后如果(!$query){throw new RuntimeException('DB:'.self:$connection->error);}
@zanderwar:是否可能在我的error()方法中获取此错误?实际上,我想获取最后一个db错误。这是否回答了您的问题?