2013-12-11 147 views
0

我對OOP非常陌生,並且正在努力學習它。所以請原諒我的noobness。我試圖連接到MySQL,並測試連接是否成功,我使用if-else條件。OOP - 通過__construct連接到數據庫

令人驚訝的是,即使在傳遞錯誤的登錄憑證時,mysql_connect也總是返回true。現在我試圖弄清楚爲什麼它會花費大約20分鐘,我放棄了。因此,我來​​到這裏尋求社區的幫助。這裏是我的代碼:

class test 
{ 
    private $host = 'localhost'; 
    private $username = 'root2'; // using wrong username on purpose 
    private $password = ''; 
    private $db = 'dummy'; 
    private $myConn;  

    public function __construct() 
    { 
     $conn = mysql_connect($this->host, $this->username, $this->password); 
     if(!$conn) 
     { 
     die('Connection failed'); // this doesn't execute 
     } 
     else 
     { 
     $this->myConn = $conn; 
     $dbhandle = mysql_select_db($this->db, $this->myConn); 
     if(! $dbhandle) 
     { 
      die('Connection successful, but database not found'); // but this gets printed instead 
     } 
     }   
    } 
} 

$test = new test(); 
+0

您的問題絕對沒有任何與OOP –

+0

做試試這個代替'$康恩=的mysql_connect($這個 - >主機,$這個 - >用戶名,$這個 - >密碼)或死亡(mysql_error()) ;'對不起我的PHP有點生鏽 – Armand

+4

尤其是當你正在學習[**請不要在新代碼**中使用'mysql_ *'函數](http://bit.ly/phpmsql)。他們不再被維護[並且被正式棄用](http://j.mp/XqV7Lp)。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。如果你選擇PDO,[這裏是一個很好的教程](http://j.mp/PoWehJ)。如果你遵循它,你應該有一個成功的連接到你的數據庫。 – vascowhite

回答

0

請不要使用mysql_*功能外,還有很多很多的原因 - which are well documented online。他們也被棄用,並將被刪除。

你會好多了using PDO

另外,我強烈建議將這個數據庫代碼抽象爲一個專用的數據庫類,它可以在必要時注入。

在話題:

該代碼段似乎爲我工作,你嘗試過var_dump荷蘭國際集團$conn?該用戶是否擁有正確的權利?

我也希望你沒有一個生產服務器,它允許root沒有密碼登錄!

0

忽略你使用mysql_ *函數而不是mysqli或pdo函數的事實,你應該在OOP代碼而不是die()中使用異常。除此之外,我無法複製您的問題 - 可能是您的mysql服務器設置爲接受無密碼登錄。

class test 
{ 
    private $host = 'localhost'; 
    private $username = 'root2'; // using wrong username on purpose 
    private $password = ''; 
    private $db = 'dummy'; 
    private $myConn;  

    public function __construct() 
    { 
     // returns false on failure 
     $conn = mysql_connect($this->host, $this->username, $this->password); 
     if(!$conn) 
     { 
     throw new RuntimeException('Connection failed'); // this doesn't execute 
     } 
     else 
     { 
     $this->myConn = $conn; 
     $dbhandle = mysql_select_db($this->db, $this->myConn); 
     if (!$dbhandle) 
     { 
      throw new RuntimeException('Connection successful, but database not found'); // but this gets printed instead 
     } 
     }   
    } 
} 

try { 
$test = new test(); 
} catch (RuntimeException $ex) { 
    die($ex->getMessage()); 
}