我正在尝试连接到数据库,当我尝试一切正确时,数据库会连接,一切都很好。但是,当我尝试使用一些错误的凭据进行连接时,它会抛出一条错误消息,我正在想办法向用户隐藏错误消息。
function connectDatabase(){
$dbServerName = 'local_host';
$dbUsername = 'root';
$dbPassword = '';
$dbName = 'kishor_me';
$conn = mysqli_connect($dbServerName, $dbUsername, $dbPassword, $dbName);
if (!$conn) {
echo "error message";
}else{
echo "success message";
}
}
有没有什么方法可以向用户显示严重错误消息,而不是该语言生成的其他错误描述,并且不给出 HTTP 500 错误?
您似乎正在使用一些过时的教程,该教程在报告错误时提供了不正确的方法:尝试手动检测连接错误并自行输出某些内容的代码。但你的代码不应该做这样的事情:PDO 和 mysqli 都可以自动引发错误,而且,你的代码的这一部分永远不应该自己与用户对话。
让我们一步一步回答你的问题:如何检测连接错误
mysql扩展与MySQL数据库对话,它无法自动处理错误,每次数据库操作都必须手动检查错误。这就是这些if (!$conn) {
东西的来源。但这个 ext 早已不复存在,PHP 有了一个新的,mysqli。它能够自动引发错误,就像 PHP 中的任何其他命令一样,例如
include
或
header()
。您不会手动检查每个
include
或
header()
结果,是吗?所以你不应该使用 mysqli 或 PDO。 如您所见,
mysqli_connect()
(以及
new mysqli()
或
new PDO()
)会自动产生错误,就像任何其他 PHP 函数一样。所以
if (!$conn) {
部分没有任何用处。既不在连接上,也不使用
query()
或任何其他数据库功能。简而言之:您不需要任何代码来检测数据库错误。现在它们已成为常规错误。而且,如果您考虑一下,不仅需要隐藏数据库错误。任何其他错误,例如“标头已发送”或“没有此类文件或目录”也必须对站点用户隐藏。
所以现在问题更加普遍了:
如何向站点用户隐藏所有错误消息
display errors
。当设置为
0
时,它将阻止 PHP 显示发生any 错误。最好在
php.ini
中设置,但如果您无法控制 PHP 配置,至少可以在 PHP 代码中正确设置:
ini_set('display_errors', 0);
它最好的部分是,这只是它设置的一个地方。因此,在本地 PC 或测试服务器上,您可以将其设置为 1 并在线查看所有错误。 再次,无需对代码进行任何更改:如您所见,失败的连接尝试已经提供了详细的错误消息,而没有 if (!$conn) {
的内容。但在实时服务器上,
display errors
必须设置为0,这样就不会向用户泄露任何错误消息,而
log_errors
必须设置为1。遗憾的是,这是一个简单的规则,但书中很少提及或教程。顺便说一句,我推荐 Jon Duckett 写的《PHP&MySQL》一书,其中详细解释了这种方法。连接凭证
如何处理连接错误
所以唯一的问题是“如何向用户显示严重错误消息?”。
如何向网站用户显示漂亮的错误页面
错误处理程序。这是我关于 PHP 错误报告的文章中的一篇:
set_exception_handler(function ($e)
{
error_log($e);
http_response_code(500);
if (ini_get('display_errors')) {
echo $e;
} else {
echo "<h1>500 Internal Server Error</h1>
An internal server error has been occurred.<br>
Please try again later.";
}
});
取决于 display_errors
值,它会显示错误本身,或仅显示一般消息。
必须完成的。当您的页面由于服务器错误而无法提供实际内容时,它必须以 5xx HTTP 代码响应。