【发布时间】:2017-09-04 18:46:42
【问题描述】:
我正在做一个小型个人项目来了解 PHP 和 MySql。我设置了一个简单的类来开始与数据库建立连接,并想验证连接是否良好,并尝试使用 connect_errno 属性,但没有得到预期的结果。这只是测试代码,因此它可能缺少一些通常包含在此类代码中的错误/安全检查。
请注意,代码在 LAMP Stack 上运行,Ubuntu 16.04 和 PHP 版本:PHP 版本 7.0.22-0ubuntu0.16.04.1
在下面的代码中,我故意将 DB_PASS 常量设置为无效值,以测试两种不同的连接验证方法。
使用 connect_errno 方法似乎不起作用。
class Database
{
public $conn;
public $connStatus;
public function __construct()
{
echo "Hi There, I am a database! <br><br>";
$this->conn = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if($this->conn->connect_errno)
{
echo "Bad Connection using connect_errno method <br/>";
}
else
{
echo "Good Connection using connect_errno method <br/>";
}
if ($this->conn == false)
{
echo "Bad Connection using db==false method <br/>";
}
else
{
echo "Good Connection using db==false method <br/>";
}
}
}
此代码块表明连接良好,尽管 DB_PASS 不正确。返回:使用 connect_errno 方法的良好连接。
if($this->conn->connect_errno)
{
echo "Bad Connection using connect_errno method <br/>";
}
else
{
echo "Good Connection using connect_errno method <br/>";
}
此代码块表示连接错误,由于DB_PASS不正确,这是正确的。返回:使用 db==false 方法的错误连接
if ($this->conn == false)
{
echo "Bad Connection using db==false method <br/>";
}
else
{
echo "Good Connection using db==false method <br/>";
}
我可以使用“db==false”检查方法,但我对此很好奇。我已经阅读了 Stack Exchange 中的几篇文章并尝试了其中一些示例,但它们似乎不起作用。
【问题讨论】:
-
这似乎与您链接的答案完全一致 - stackoverflow.com/questions/25809912/… 您混合了 OO 界面和程序界面。
-
我尝试了这些示例,但它们不起作用。我不确定我做错了什么。
-
“他们不会工作”并不能真正帮助任何人回答你的问题,没有具体细节。您的代码与您链接的答案中的代码不匹配。您正在使用
mysqli_connect并期望 OO 接口正常工作。这在欺骗中专门解决了,请再次阅读答案。 -
问题是你不应该混合程序和 OOP。它通常会起作用 - 但有一个重要区别:使用 OOP 连接(与您正在做的不同)将始终返回一个对象。然后您需要使用
connect_errno属性,这比检查布尔值要好。