Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在mysql错误方法中没有错误retuns_Php_Mysql - Fatal编程技术网

Php 在mysql错误方法中没有错误retuns

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;

我有一个php/mysql数据库类,如下代码所示。当mysql查询中出现错误时,我无法从error方法中获取任何mysql错误。如果这里有什么不对劲,请引导我。如果我使用非oop方法来查询相同的东西,那么我可以从中得到预期的错误。但这门课什么都没有

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错误。这是否回答了您的问题?