Php DB类不会加载

Php DB类不会加载,php,mysqli,Php,Mysqli,我正在尝试使用simle db类进行连接。出于某种原因,它只能打印出来 初始化数据库类 test.php db.class.php class DB extends mysqli { private static $instance = null; private function __construct () { parent::init(); $host = 'localhost'; $user = 'root'; $pass = 'MY_PASS';

我正在尝试使用simle db类进行连接。出于某种原因,它只能打印出来 初始化数据库类

test.php

db.class.php

class DB extends mysqli { private static $instance = null; private function __construct () { parent::init(); $host = 'localhost'; $user = 'root'; $pass = 'MY_PASS'; $dbse = 'MY_DB'; parent::real_connect($host, $user, $pass, $dbse); if (0 !== $this->connect_errno): die('MySQL Error: '. mysqli_connect_error()); //throw new Exception('MySQL Error: '. mysqli_connect_error()); endif; } public function fetch ($sql, $id = null, $one = false) { $retval = array(); if ($res = $this->query($sql)): $index = 0; while ($rs = $res->fetch_assoc()): if ($one): $retval = $rs; break; else: $retval[$id ? $rs[$id] : $index++] = $rs; endif; endwhile; $res->close(); endif; return $retval; } }

我试图搜索我的日志文件以查找错误,但结果是空的。

好的,知道了

在呼叫db时,呼叫新db;这意味着您正试图调用DB类的构造函数

在您的DB类中,看起来您正试图创建一个单例,但是缺少了一些东西,通常会为实例分配数据库连接,并询问实例是否为空,创建一个新连接,或者是否使用同一实例

在一天结束时,您可以将构造函数更改为public。

尝试以下方法:

Db_类:

class Db_class{
/***********************CONNECT TO DB*********************/
public function db_connect(){
    $user       = '***';
    $db         = '***';
    $password   = '***';
    $host       = '***';

    try {
        $dbh = new PDO("mysql:host=$host;dbname=$db", $user, $password);
    }
    catch(PDOException $err) {
        echo "Error: ".$err->getMessage()."<br/>";
        die();
    }
    return $dbh;
}
/******************PREPARE AND EXECUTE SQL STATEMENTS*****/
public function query($statement){
    $keyword = substr(strtoupper($statement), 0, strpos($statement, " "));
    $dbh = $this->db_connect();     
    if($dbh){
        try{
            $sql = $dbh->prepare($statement);
            $exe = $sql->execute();
        }
        catch(PDOException $err){
            return $err->getMessage();
        }
        switch($keyword){
            case "SELECT": 
                $result = array();
                while($row = $sql->fetch(PDO::FETCH_ASSOC)){
                    $result[] = $row;
                }
                return $result;
                break;
            default: 
                return $exe;
                break;
        }
    }
    else{
        return false;
    }
}

您的构造函数被标记为private,这意味着新数据库将引发错误。我看到您有一个私有属性来存储一个实例,您是否缺少返回一个新对象的singleton方法?

为什么要重新发明轮子?只需使用PDO对象,也可以考虑这一点。但现在我只是想找出我做错了什么。把这个添加到脚本ini_集合“display_errors”,“1”的顶部;错误报告全部;然后再运行一次。希望能打印出任何错误。尝试了这个。它不需要工作:我确实得到了一个空白页。当然你得到了一个blnak页,你在那里没有输出。添加:var_dump$result;到另一个PHP查看执行的SQL语句的结果,不要忘记添加用户名、数据库名、密码和服务器地址主机!Y.Hermes,我确实打印了$result。问题是结尾缺少了一个}。是的,在添加了´}之后,它工作了。谢谢这是一个大型PDO DB类的一部分吗?出于我的需要,它是所有PDO类的一部分。这是我的第一个cms的一部分-
class Db_class{
/***********************CONNECT TO DB*********************/
public function db_connect(){
    $user       = '***';
    $db         = '***';
    $password   = '***';
    $host       = '***';

    try {
        $dbh = new PDO("mysql:host=$host;dbname=$db", $user, $password);
    }
    catch(PDOException $err) {
        echo "Error: ".$err->getMessage()."<br/>";
        die();
    }
    return $dbh;
}
/******************PREPARE AND EXECUTE SQL STATEMENTS*****/
public function query($statement){
    $keyword = substr(strtoupper($statement), 0, strpos($statement, " "));
    $dbh = $this->db_connect();     
    if($dbh){
        try{
            $sql = $dbh->prepare($statement);
            $exe = $sql->execute();
        }
        catch(PDOException $err){
            return $err->getMessage();
        }
        switch($keyword){
            case "SELECT": 
                $result = array();
                while($row = $sql->fetch(PDO::FETCH_ASSOC)){
                    $result[] = $row;
                }
                return $result;
                break;
            default: 
                return $exe;
                break;
        }
    }
    else{
        return false;
    }
}
    $db = new Db_class();

    $sql = "SQL STATEMENT";
    $result = $db->query($sql);