2017-03-17 58 views
-3

我看了各種論壇軟件,試圖複製一個想法。這是爲了讓我更好地使用PHP的類,但是,這是我第一次使用類。我創建了一個類,允許我通過簡單的一行命令從數據庫中獲取信息。我知道大多數人會說這不是一個好主意,但是,當用戶插入數據時,這條線不會被使用。在PHP中集成班級

這裏是類:

$db = new DB_MySQLi; 

class DB_MySQLi 
{ 

    function simple_select($table, $fields="*", $conditions="", $options=array()) 
    { 
     $query = "SELECT ".$fields." FROM ".$this->table_prefix.$table; 

     if($conditions != "") 
     { 
      $query .= " WHERE ".$conditions; 
     } 

     if(isset($options['group_by'])) 
     { 
      $query .= " GROUP BY ".$options['group_by']; 
     } 

     if(isset($options['order_by'])) 
     { 
      $query .= " ORDER BY ".$options['order_by']; 
      if(isset($options['order_dir'])) 
      { 
       $query .= " ".my_strtoupper($options['order_dir']); 
      } 
     } 

     if(isset($options['limit_start']) && isset($options['limit'])) 
     { 
      $query .= " LIMIT ".$options['limit_start'].", ".$options['limit']; 
     } 
     else if(isset($options['limit'])) 
     { 
      $query .= " LIMIT ".$options['limit']; 
     } 

     return $this->query($query); 
    } 


} 

每當我試圖運行這樣的查詢:

$query = $db->simple_select("users", "*"); 

我得到這些錯誤: 公告:未定義的屬性:DB_MySQLi :: $ TABLE_PREFIX 致命錯誤:調用未定義的方法DB_MySQLi :: query()

DB_MySQLi怎麼沒有定義?

+0

'DB_MySQLi'不是未定義的。你正試圖對類「DB_MySQLi」調用'query()',它沒有'query()'方法。你是否想要擴展PDO,或者使用某種實例變量來存儲數據庫連接? – Bytewave

+0

我有$ db = new DB_MySQLi;在代碼 –

+0

這只是你的數據庫包裝。它不是數據庫連接 - PHP不知道你正在使用哪個數據庫,它在哪裏,或者如何登錄。這就是['PDO'](https://secure.php.net/manual/en/book.pdo.php)和['MySQLi'](https://secure.php.net/manual/en/book .mysqli.php)是。它們處理數據庫連接和查詢的複雜工作,幷包含可用於包裝類的'query()'方法。 – Bytewave

回答

0

DB_MySQLi不是未定義的,DB_MySQLi::query()是。

return $this->query($query); - 當您告訴PHP使用$this->時,您正在調用類的範圍內(該類的特定實例)。在這種情況下,您的DB_MySQLi類中沒有稱爲query的方法;所以它無法找到它並因此拋出錯誤。

+0

但是當我添加「$ db = new DB_MySQLi;」時怎麼沒有做任何事情? –