我对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();
答案 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());
}