Mysqli 连接警告显示连接详细信息是否错误


Mysqli connection warning showing if connection details are bad

我有一些代码允许用户在他们的服务器上输入他们的数据库的详细信息。提交详细信息后,代码会检查与数据库的连接,以查看是否输入了有效的详细信息。我希望它给出变量为真的结果,如果连接有效或确实如此,如下所示:

$mysqli = new mysqli($_POST['dbHost'],$_POST['dbUser'],$_POST['dbPassword'],$_POST['dbName']);
if ($mysqli->connect_errno) { $badDetails = true; }
else { goodDetails = true; }

问题是,如果细节确实不正确,它会从上面代码的第一行显示PHP警告,给出"未知MySQL服务器主机"。

解决这个问题的方法是什么?我不希望PHP为此抛出自己的可见错误,我想自己处理错误。

你不必担心视觉错误。在生产环境中,这些应该在 ini 中关闭,所有错误都应该转到服务器上的日志,而不仅仅是屏幕。

这是通过display_errors设置和 error_reporting() 配置的

许多框架使用自定义实现覆盖 PHP 错误处理程序,以漂亮的方式显示错误,具体取决于它们的严重性。
为此,您可以覆盖 PHP 错误处理程序

如手册所示,可以为常规错误和异常注册自定义处理程序。并且还可以触发用户定义的错误。

只需使用die()

$mysqli = new mysqli($_POST['dbHost'],$_POST['dbUser'],$_POST['dbPassword'],$_POST['dbName']) or die("Database Connection Failed");

一个快速、肮脏的方法是错误抑制:

$con = @mysqli_connect( /* info */ );

请注意,您不应该将其保留在那里,因为这将抑制所有错误,并且mysqli可能有多个您可能需要了解的错误。

虽然我会先检查主机变量,看看为什么会导致错误。你也可以使用模具。

$con = mysqli_connect(/* info */) or die ("SQL Error!");

至于在哪里查看,请尝试查看主机 var 是否实际设置并检查其值:

if (!isset($_POST['dbHost'])) {
    echo "Host var not set!";
} else {
    echo "Host var set: " . $_POST['dbHost']
}