2014-11-05 58 views
0

我仍然玩弄类并不能获得这个运行:查询DB一类

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'); 

这条线......

有人可以帮助我,我怎么能解决这个问题?谢谢!

回答

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; 
    } 
} 

请注意,如果你要调用从类,您扩展

功能父关键字仅用于调用父类的构造

你的情况$这个被填充,所以没有必要使用父:: getDbc(),而不是你应该使用$这 - > getDbc()

但是

如果你是压倒一切的getDbc你会:

class my_other_class extends db_connection{ 

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

不妨删除未使用的'$ query'和'$ row'变量以及 – Steve 2014-11-05 15:34:52

+0

非常好,它适用于一行。谢谢!我应该在课堂内部做while循环还是在运行课程时进行操作? – baao 2014-11-05 15:36:26

+0

我将数据库驱动程序的设计留给了您的想象,但是如果我是您,我会查看一些最受欢迎的ORM,例如http://en.wikipedia.org/wiki/Doctrine_(PHP),并且为了更简单一些,您可以看看github找到一些轻量级的开源库,从中你可以学习/改进 – vertazzar 2014-11-05 15:38:48