使用类查询DB

时间:2014-11-05 15:28:07

标签: php mysql class

我还在玩类,但不能运行这个:

class db_connection {
    private $dbc;


    public function __construct()
    {
        $this->dbc = new mysqli(HOST_ONE, USER_ONE, PASS_ONE, DB_ONE);

    }

    public function getDbc()
    {
        return $this->dbc;
    }

}

class db_query extends db_connection{
    private $querystring;

    private $result;

    function __construct ($table, $field) {
        $this->querystring = $query = parent::getDbc()->query("SELECT ".$field." FROM ".$table);
        $this->result = $row = $query->fetch_assoc();
    }
    function get_resultset() {
        return $this->result;
    }
}

这就是我尝试运行它的方式:

$db_conn = new db_connection();
$db = $db_conn->getDbc();

$action = new db_query('datenbanken','id');
$result = $action->get_resultset();
var_dump($result);

建立连接没有任何问题,但它不会使用我的类查询数据库。

我不会实现我可以运行查询而只需要设置

$action = new db_query('datenbanken','id'); 

这一行...

有人可以帮我解决这个问题吗?谢谢!

1 个答案:

答案 0 :(得分:2)

在覆盖扩展的类时需要调用父构造函数,所以在这种情况下

class db_query extends db_connection{
    private $querystring;

    private $result;

    function __construct ($table, $field) {
        parent::__construct(); // now we have $this->dbc constructed
        $this->querystring = $query = $this->getDbc()->query("SELECT ".$field." FROM ".$table);
        $this->result = $row = $query->fetch_assoc();
    }
    function get_resultset() {
        return $this->result;
    }
}

请注意,仅当您要从扩展的类中调用该函数时才使用父关键字

在你的情况下$ this会被填充,所以不需要使用parent :: getDbc(),而应该使用$ this-> getDbc()

但是,如果你压倒getDbc,你会得到:

class my_other_class extends db_connection{

    function getDbc() {
        // call parent funct
        $res = parent::getDbc();
        $res = doSomethingWithRes($res);
        return $res;
    }
}