抑制符(通常是@
符号)无法隐藏数据库连接致命错误的主要原因包括:
try {
$conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
// 设置PDO错误模式为异常
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
// 自定义错误处理
error_log("数据库连接失败: " . $e->getMessage());
// 显示用户友好信息或重定向
die("无法连接到数据库,请稍后再试");
}
// 在连接前设置错误报告级别
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE & ~E_WARNING);
set_error_handler(function($errno, $errstr, $errfile, $errline) {
// 处理错误,可以记录日志而不显示给用户
error_log("Error [$errno] $errstr in $errfile on line $errline");
return true; // 阻止PHP默认错误处理
});
// 恢复原始错误处理
restore_error_handler();
确保php.ini中以下设置合适:
display_errors = Off
log_errors = On
error_log = /path/to/php-error.log
如果您需要针对特定数据库扩展(如mysqli)或特定场景的解决方案,请提供更多细节,我可以给出更具体的建议。