如何仅显示json代码而不显示php警告

如何仅显示json代码而不显示php警告,php,Php,在本例中,我无意中输入了错误的数据库用户名或密码,我的目标是如何以JSON数据的形式生成错误,并以PHP警告或错误的形式打开,如我的图片 // Here's my PHP Code if (!empty($_POST)){ $test_conn = new mysqli('localhost' , $_POST['db_user'] , $_POST['db_pass']); $conn = new mysqli('localhost' , $_POST['db_user'] ,

在本例中,我无意中输入了错误的数据库用户名或密码,我的目标是如何以JSON数据的形式生成错误,并以PHP警告或错误的形式打开,如我的图片

// Here's my PHP Code

if (!empty($_POST)){
   $test_conn = new mysqli('localhost' , $_POST['db_user'] , $_POST['db_pass']);
   $conn = new mysqli('localhost' , $_POST['db_user'] , $_POST['db_pass'] , $_POST['db_name']);
   if ($test_conn->connect_error){
       $response = array('status' => 0 , 'message' => "Failed Connect to Databases");
       print_r(json_encode($response));
   }else{
       // The Code When Username and Password is Correct
   }
}


在这里,我知道用户名或密码是错误的,但我不知道如何只在底部的图像中显示json数据,而不显示php警告如果您确定这是您想要的,只需在脚本顶部添加以下内容即可禁用错误:

error_reporting(0);
如果要隐藏给定代码的错误,请使用以下命令:

// Disable errors and get current error reporting level
$err = error_reporting(0);

/* here goes you buggy code */

// Set the default error reporting level
error_reporting($err);

为了使用自己的
connect\u error
检查,您必须抑制php错误报告。建议对
@
执行以下操作:

$test_conn = @new mysqli( ... )
这将仅抑制由mysqli对象的错误实例化引起的错误。应该清楚的是,您必须自己处理这些错误(就像您已经做的那样)。所有其他错误仍然可能导致php脚本停止,并且不会向调用脚本的AJAX函数返回任何JSON字符串

正如@Victor在他的回答中正确指出的那样,您可以通过在脚本开头设置
error\u reporting(0)
来禁用脚本(或其部分)的所有错误。在这种情况下,您不必检查其他可能的错误,例如,
$\u POST
数组中的db凭据未设置或为空

正如@Ben在他的评论中提到的,您还可以通过设置
mysqli\u report(mysqli\u report\u STRICT)
使mysqli抛出异常以避免致命错误。这也是解决你问题的可行办法

一般来说,您应该在php.ini中进行以下设置:

display_errors = Off
error_log = syslog

这可以防止错误消息暴露在www(安全性)中,同时使开发人员可以在
/var/log/syslog
(可维护性)中使用它们。

这对我来说很有用。但这是禁用所有错误报告对吗?如何启用它?就让它(1)?@AjiDwiPrasetio,是的,它会禁用所有错误。如果您只想为一段代码禁用它们,请检查我的更新。如果可以通过www访问页面,则必须禁用显示错误!这是一个很大的安全优势。@digijay Ben是对的。在生产服务器上,不应显示错误。这就是为什么使用错误控制操作符(
@
)是个坏主意,因为它不能为您提供任何灵活性。例如,在本地主机上,您可能希望显示错误,而在远程服务器上,您应该隐藏错误。因此,每次需要在生产服务器上上载文件时,都不能添加
@
错误报告()
是最好的选择,至少因为您可以控制显示错误的位置和对象(例如,
if(not_admin()| | not_localhost()){error_reporting(0);}
)。@digijay错误控制操作符仅对给定字符串禁用错误。其他错误仍将显示(例如,如果未定义
$\u POST['db\u user']
)。检查我的更新以获得新的示例。错误永远不会以静默方式传递@Ben但是你如何将它们作为json消息返回到ajax调用中呢?@digijay谢谢你,我认为你是最好的solution@digijay您可以告诉mysqli抛出异常,而不是得到警告。mysqli_报告(mysqli_报告严格)。@在我看来,这是一种糟糕的风格。想象一下,您必须使用这种外来代码。如果它不起作用,并且根本没有报告错误,那么a**中的真正痛苦就是。特别是在一个功能中,你可以轻松地传递错误的凭据。不知道你试图完成什么,但你不应该通过表单提交db凭据。是的,我知道@Ben,这个页面只供管理员使用,我创建了一个设置页面,管理员可以在其中自动使数据库和表仅输入用户名和密码请查看