2013-12-11 114 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()); 
}