我正在尝试连接到数据库,当我尝试所有内容都正确时,数据库连接,一切正常。但是,当我尝试使用一些错误的凭据进行连接时,它会抛出一条错误消息,我正在寻找一种方法来向用户隐藏该错误消息。
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";
}
}
我尝试使用mysqli_connect_errno()和mysqli_connect_error(),但也返回了相同的错误。
我并不是试图通过现在纠正错误来摆脱这个错误,也就是通过将"local_host"改为"localhost"。
现在我收到了以下错误消息。
Warning: mysqli_connect(): php_network_getaddresses: getaddrinfo for local_host failed: No such host is known. in C:\Xampp\htdocs\test.php on line 17
Fatal error: Uncaught mysqli_sql_exception: php_network_getaddresses: getaddrinfo for local_host failed: No such host is known. in C:\Xampp\htdocs\test.php:17 Stack trace: #0 C:\Xampp\htdocs\test.php(17): mysqli_connect('local_host', 'root', '', 'kishor_me') #1 C:\Xampp\htdocs\test.php(28): connectDatabase() #2 {main} thrown in C:\Xampp\htdocs\test.php on line 17
我也试过
mysqli_report(MYSQLI_REPORT_OFF);
现在显示以下错误:
Warning: mysqli_connect(): php_network_getaddresses: getaddrinfo for local_host failed: No such host is known. In C:\Xampp\htdocs\test.php on line 17
Warning: mysqli_connect(): (HY000/2002): php_network_getaddresses: getaddrinfo for local_host failed: No such host is known. in C:\Xampp\htdocs\test.php on line 17
error message
现在,我已经使用以下命令隐藏了错误消息:
ini_set('display_errors','0');
现在它抛出了一个HTTP 500错误。
是否有任何方法可以向用户显示严重的错误消息,而不是由语言生成的其他错误描述,也不会给出HTTP 500错误?请让我知道是否有任何方法,或者这个问题是否已经得到回答。
先谢了。
1条答案
按热度按时间kgsdhlau1#
看起来您使用的是一些过时的教程,在报告错误时提供了不正确的方法:一段代码,它试图手动检测连接错误并自行输出一些内容。但您的代码不应该做类似的事情。Mysqli可以自动报告错误,数据库错误与其他错误没有什么不同,因此不需要任何特殊处理。
我们来一步一步回答你的问题:
如何检测连接错误
在古代,大约10年前,PHP使用mysql extension与MySQL数据库对话,但MySQL数据库无法自动处理错误,每个数据库操作都必须手动检查错误。这就是
if (!$conn) {
的由来。但这个库早就没有了,PHP有了一个新的库mysqli。它具有自动引发错误的能力。就像PHP中的任何其他命令一样,例如include
或header()
。您不会手动检查每个include
或header()
结果,对吗?* 所以您不应该使用mysqli。*正如你所看到的,
mysqli_connect()
会自动产生错误,就像其他函数一样,所以你的代码中不能有if (!$conn) {
部分,无论是在connect上,* 还是在query()
或其他mysqli函数中 *。简而言之:你不需要任何代码来检测数据库错误。2它们现在是常见的错误。3而且,如果你想到它,不仅数据库错误必须被隐藏。4任何其他错误,如"标题已发送"或"没有这样的文件或目录"必须对网站用户隐藏。
所以现在的问题更一般化了:
如何对站点用户隐藏所有错误消息
要对站点用户隐藏错误消息,必须使用专门用于此目的的配置选项:
display errors
。当设置为0
时,它将阻止PHP显示 * 任何 * 发生的错误。最好在php.ini中设置,但如果您无法控制PHP配置,至少可以在PHP代码中正确设置:最棒的是,这只是一个单独的设置位置。因此,在本地PC或测试服务器上,您可以将其设置为1,然后在线查看所有错误。* 同样,代码没有任何更改:* 正如您所看到的,mysqli已经提供了详细的错误消息,没有
if (!$conn) {
的内容!但在一个实时服务器上,display errors
必须设置为0,因此没有任何错误消息泄漏给用户,而log_errors
必须设置为1。这是一个简单的规则,可惜的是,在书籍或教程中很少提到。顺便说一句,我推荐Jon Duckett的PHP & MySQL书籍,其中详细解释了这种方法。因此剩下的唯一问题是"如何向用户显示严重的错误消息?"。
如何向站点用户显示漂亮的错误页面
只需配置一个 * 错误处理程序 *。下面是我关于PHP error reporting的文章中的一个:
取决于
display_errors
的值,它将显示错误本身,或仅显示一般消息。请注意,它"给出HTTP 500错误",这与您的请求相反,是实际上必须做的事情。当您的页面由于服务器错误而无法提供实际内容时,它必须用5xx HTTP代码响应。