我有一个函数,可以在无法找到实时数据库的情况下连接到实时生产数据库或测试数据库。 它利用 mysqli_connect_error() 来确定要使用哪个数据库。 假设是,如果找不到实时数据库,则 PHP 脚本必须在测试服务器上运行,如下所示:
<?php
function dbConnect() {
@ $db = new mysqli('localhost', 'live_user_name', 'live_PW', 'live_db_name' );
$_SESSION['connect_type'] = 'live';
$test = mysqli_connect_errno();
if (mysqli_connect_errno()) { // connect to test database instead
@ $db = new mysqli('localhost', 'test_user_name', 'test_PW', 'test_db_name' );
if (mysqli_connect_errno()) {
$test = mysqli_connect_errno();
echo "Error # ".$test."<br/>";
echo 'Error: Could not connect to database. Please try again later.';
exit;
} else {
$_SESSION['connect_type'] = 'test';
}
}
return $db;
}
?>
不幸的是,这在 PHP 8.1 下不起作用,因为连接错误被视为致命错误并终止执行。
有人知道如何解决这个问题,还是我必须重新考虑我的连接功能?
php 8.1 下的 mysqli 函数会抛出异常,您必须捕获该异常。
例如:
try {
$db = new mysqli(...);
} catch (mysqli_sql_exception $e) {
// If live database connection fails, try connecting to the test database.
try {
$db = new mysqli(...);
} catch (mysqli_sql_exception $e) {
// If test database connection also fails, display an error message.
echo "Error: Could not connect to database. Please try again later.";
exit;
}
}