2012-07-08 180 views
0

db_class.phpPHP的錯誤呼叫成員函數查詢()非對象上

<?php 
class db_mysql 
{ 
    private $dbhost; 
    private $dbusername; 
    private $dbpassword; 
    private $db; 

    //Class is called with all parameters to make a successful connection. 
    // 
    function __construct($dbhost,$dbusername,$dbpassword,$db) 
     { 

     global $dbh; 
     try { 
       $dbh = new PDO("mysql:host=$dbhost;dbname=$db", $dbusername, $dbpassword); 
      foreach($dbh->query('show tables;') as $row) { 
      print_r($row); 
      } 
      //$dbh = null; 
     } catch (PDOException $e) { 
      print "Error!: " . $e->getMessage() . "<br/>"; 
      die(); 
     } 

     } 

    //Function to execute a query in the database and return result in a array 
    // 
    function db_mysql_query($queryst) 
    { 
     foreach($dbh->query($queryst) as $row) { 
      print_r($row); 
      } 
    } 

} 

的index.php:

<?php 
include 'db_class.php'; 

$db_m = new db_mysql('localhost','root','','arsaas'); 
$db_m->db_mysql_query('show tables;'); 
?> 

執行的index.php提供了以下錯誤: 通知:未定義的變量:在C:\ xampp \ htdocs \ srry \ db_class.php上的dbh在線32

致命錯誤:調用C:\ xampp \ htdocs \ srry中的非對象的成員函數query() \ db_class.php在線32

爲什麼說dbh是未定義的變量,當它在類的構造函數中實例化並聲明爲全局變量時?

任何幫助表示讚賞。提前致謝。

AR

+0

特定的錯誤信息的哪一部分很難理解? – hakre 2012-07-08 16:20:12

回答

2

db_mysql_query方法沒有定義變量$胸徑,因此試圖調用非對象的方法查詢不工作。您可以將PDO對象($ dbh)存儲在構造函數中的db_mysql對象中,並在調用db_mysql_query時使用它。如果你只想使用一個數據庫連接,那麼我建議你考慮在db_mysql類中使用單例模式。 http://www.talkphp.com/advanced-php-programming/1304-how-use-singleton-design-pattern.html

+0

謝謝。然而,它比引用GLOBALS數組的另一種方法複雜一些。 – user1510223 2012-07-08 18:01:35

+1

單身只是一個全球性的。你建議寫一個全球化的解決OP的問題。不使用全球/單身是這裏的方式。 – 2013-11-28 16:28:21

相關問題