OOP - 通过__construct连接到数据库

时间:2013-12-11 13:40:21

标签: php

我对OOP很新,我正在努力学习它。请原谅我的noobness。我正在尝试连接到mysql并测试连接是否成功,我正在使用if-else条件。

令人惊讶的是,即使在传递错误的登录凭据时,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();

2 个答案:

答案 0 :(得分:0)

请不要使用mysql_*功能,原因有多种原因 - which are well documented online。它们也被弃用,并且将被删除。

using PDO你会好多了!

此外,我强烈建议将此数据库代码抽象为专用数据库类,可以在必要时注入。

在-话题:

该代码段似乎对我有用,您是否尝试var_dump $conn?该用户是否拥有正确的权利?

我也希望你没有一个允许root登录而没有密码的生产服务器!

答案 1 :(得分: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());
}