2009-07-21 28 views
0

我寫了下面的數據庫接口類:PHP自定義數據庫接口類 - 沒有數據庫選擇

<?php 

// dbinterface.php 

class db { 
    private $con; 
    private $host; 
    private $user; 
    private $pass; 
    private $database; 
    private $error; 

    function db($host, $user, $pass, $database) { 
     $this->con = mysql_connect($host, $user, $pass); 
     mysql_select_db($database); 
    } 

    function escape($text) { 
     return mysql_real_escape_string($text); 
    } 

    function run($query) { 
     $q = mysql_query($query); 
     if ($q === false) { 
      $this->error = "Error " . mysql_errno() . ": " . mysql_error($this->con); 
      return false; 
     } elseif ($q === true) { 
      return true; 
     } else { 
      $result = array(); 
      while ($row = mysql_fetch_assoc($q)) { 
       array_push($result, $row); 
      } 
      return $result; 
     } 
    } 

    function get_error() { 
     return $this->error; 
    } 

    function cose() { 
     mysql_close($this->con); 
    } 
} 


?> 

的問題是,由於某種原因,當我嘗試運行它的查詢時,我得到的錯誤: 未選擇數據庫。但是我的代碼在構造函數中選擇它。我檢查並確保我傳遞了正確的db名稱。我確信它實際上已經過去了。

回答

1

你應該經常檢查內建函數的返回值。嘗試這樣的事情,你可能會得到一個答案:

function db($host, $user, $pass, $database) { 
    if (($this->con = mysql_connect($host, $user, $pass)) === false) { 
     throw new Exception(mysql_error()); 
    } 
    if (!mysql_select_db($database)) { 
     throw new Exception(mysql_error()); 
    } 
} 
0

這個類對我來說工作得很好......你應該肯定會做更多的錯誤檢查。如果你指定一個不存在的數據庫,那麼你可以得到「No database selected」錯誤。

編輯:測試mysql_select_db()的返回值並觸發錯誤或拋出異常,如果它不返回true。

+0

是的,我只是試過這一點,它並沒有引發任何錯誤。 – 2009-07-21 08:20:00