PHP / MySQLi - >说即使有无效的用户我也连接到数据库

时间:2013-11-18 19:10:40

标签: php mysqli

我正在设置安装脚本。在第一页上有数据库名称,用户名,密码等的输入,它写入一个文件。这非常有效。一旦他们单击“保存并继续”,它就会写入文件(我故意将错误的数据库用户名和密码输入到测试中),然后将其重定向到第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>.'; }

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


编辑:

这是db连接文件

    // 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报告任何类型的错误。此时连接是否可能不存在?我不确定说实话会发生什么。我已经尝试检查错误和错误并且没有。

3 个答案:

答案 0 :(得分:1)

如果没有看到创建$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>.'; }

答案 1 :(得分:0)

您应该以这种方式检查连接错误状态:

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

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

答案 2 :(得分:0)

检查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>.'; 
}
通过这种方式,您将避免使用不必要的错误消息来污染您的日志文件