PHP/MySQLi->;表示即使存在无效用户,我也已连接到数据库


PHP/MySQLi -> Says I am connected to database even when there is invalid user

我正在设置一个安装脚本。在第一个页面上,有数据库名称、用户名、密码等的输入,它会写入一个文件。这很管用。一旦他们单击"保存并继续",它就会写入文件(我故意输入错误的数据库用户名和密码进行测试),然后将他们重定向到第2页。在第2页,这是问题开始出现的地方。

就像我说的。。我故意输入了错误的用户名和密码。因此,一开始,它立即表示无法建立与数据库的连接。然后,当我尝试检查连接时,它显示仍然有连接。我可能试图检查这个连接是否错误,但不能完全确定。下面是它所说内容的预览,以及涉及本节的代码的预览。

这就是正在显示的内容。

Warning: mysqli::mysqli(): (28000/1045): Access denied for user 'kylej_user1568'@'localhost' (using password: YES) in /home/kylej/public_html/database.php on line 6
Failed to connect to MySQL: Access denied for user 'kylej_user1568'@'localhost' (using password: YES)
Database Connection Status:
Successfully connected to your database

这就是代码的样子。。。

include('configuration.php');
if (isset($db_database)) { 
include('database.php');
}
echo '<br /><br /><br />';
echo 'Database Connection Status:<br />';
if ($con) { echo 'Successfully connected to your database'; }
if (!$con) { echo 'We were unsuccessful in connecting to your database, please <a href="#">Go back and reconfigure configuration file</a>.'; }

所以我想我的主要问题是:我如何测试连接,看看是否有一个有效的连接来显示输入的信息是否成功?


编辑:

这是数据库连接文件

    // Create connection
    $con = new mysqli($db_host, $db_username, $db_password, $db_database);
    // Check connection
    if (mysqli_connect_errno($con)) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

这是更新的检查连接代码

include('configuration.php');
if (isset($db_database)) { 
include('database.php');
}  // if database is set
echo '<br /><br /><br />';
echo 'Database Connection Status:<br />';
if (!$con->connect_error) { echo 'Successfully connected to your database'; }
if ($con->connect_error) { echo 'We were unsuccessful in connecting to your database, please <a href="#">Go back and reconfigure configuration file</a>.'; }

这是一页。。。。

Warning: mysqli::mysqli(): (28000/1045): Access denied for user 'kylej_user1568'@'localhost' (using password: YES) in /home/kylej/public_html/WMS/include/database.php on line 6
Failed to connect to MySQL: Access denied for user 'kylej_user1568'@'localhost' (using password: YES)

Database Connection Status:
Successfully connected to your database

无论我做什么,我都无法从$con中报告任何类型的错误。到目前为止,连接是否可能不存在?老实说,我不知道发生了什么。我试着检查了两个错误和errno,什么都没有。

如果没有看到创建$con的代码,很难确定发生了什么。然而,我猜测您的问题来自PHP的一个怪癖:__construct函数总是会返回一个对象。这将是一个真实的值,因此将通过if测试。

在这种情况下,如果设置错误,您认为new mysqli(...)将返回false。不会的。它将返回一个未连接到数据库的mysqli对象。

您需要测试mysqli::$connect_error属性:

if (!$con->connect_error) { echo 'Successfully connected to your database'; }
if ($con->connect_error) { echo 'We were unsuccessful in connecting to your database, please <a href="#">Go back and reconfigure configuration file</a>.'; }

检查mysqli_connect_errno()

或者更好地将mysqli设置为异常模式。这样你就不需要手动错误检查了:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

对于安装脚本,您可以将其设置为

echo 'Database Connection Status:<br />';
try {
    $con = new mysqli($db_host, $db_username, $db_password, $db_database);
    echo 'Successfully connected to your database'; 
} catch (mysqli_sql_exception $e) { 
   echo 'We were unsuccessful in connecting to your database<br>';
   echo "Database says: ".$e->getMessage()."<br>";
   echo 'please <a href="#">Go back and reconfigure configuration file</a>.'; 
}

这样可以避免不必要的错误消息

污染日志文件

您应该通过以下方式检查连接错误状态:

if ($con->connect_error) {
    die('Connect Error (' . $con->connect_errno . ') '
            . $con->connect_error);
}

http://www.php.net/manual/en/mysqli.construct.php