PHP 8.1数据库连接返回HTTP 500,无法使用$conn->connect_error求助
问题原因与解决方法
核心问题:PHP版本差异导致错误处理逻辑失效
PHP 8.0及以上版本中,mysqli构造函数默认会抛出mysqli_sql_exception异常,不再像PHP7.3那样仅设置connect_error属性。所以你的if ($conn->connect_error)判断代码根本没机会执行,异常直接触发了HTTP 500错误。
另外从错误日志能看到,你实际的连接错误是主机名写成了localhostt(多了一个字母t),这个拼写错误必须先修正,否则无论哪种处理方式都无法成功连接。
解决方案1:使用异常捕获处理(推荐,符合PHP8+规范)
把连接代码放到try-catch块中,捕获并处理异常:
// Database settings const DB_HOST = 'localhost'; // 修正拼写错误 const DB_DATABASE = 'cascade'; const DB_USER = 'root'; const DB_PASSWORD = 'root'; const DB_PORT = '8889'; // Salt encryption const SALT = '250b0623153be0e93d81c3ab1fe710f07d'; // Connect try { $conn = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE, DB_PORT); } catch (mysqli_sql_exception $e) { die("Connection failed: " . $e->getMessage()); }
解决方案2:关闭mysqli异常模式(兼容旧代码,不推荐)
如果你想保留原来的connect_error判断逻辑,可以关闭mysqli的异常报告模式,回到PHP7.x的行为:
// Database settings const DB_HOST = 'localhost'; // 修正拼写错误 const DB_DATABASE = 'cascade'; const DB_USER = 'root'; const DB_PASSWORD = 'root'; const DB_PORT = '8889'; // Salt encryption const SALT = '250b0623153be0e93d81c3ab1fe710f07d'; // 关闭mysqli异常模式,切换为传统错误报告 mysqli_report(MYSQLI_REPORT_OFF); // Connect $conn = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE, DB_PORT); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); }
内容的提问来源于stack exchange,提问作者Andrew Webb
相关产品推荐
相关产品推荐

