2014-11-05 80 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