我正在设置安装脚本。在第一页上有数据库名称,用户名,密码等的输入,它写入一个文件。这非常有效。一旦他们单击“保存并继续”,它就会写入文件(我故意将错误的数据库用户名和密码输入到测试中),然后将其重定向到第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报告任何类型的错误。此时连接是否可能不存在?我不确定说实话会发生什么。我已经尝试检查错误和错误并且没有。
答案 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);
}
答案 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>.';
}
通过这种方式,您将避免使用不必要的错误消息来污染您的日志文件