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

Php 显示连接详细信息是否错误的Mysqli连接警告,php,Php,我有一些代码,允许用户在服务器上输入数据库的详细信息。提交详细信息后,代码将检查与数据库的连接,以查看是否输入了有效的详细信息。我希望它给出的变量结果是真的,如果连接起作用或起作用,比如: $mysqli = new mysqli($_POST['dbHost'],$_POST['dbUser'],$_POST['dbPassword'],$_POST['dbName']); if ($mysqli->connect_errno) { $badDetails = true; } else

我有一些代码,允许用户在服务器上输入数据库的详细信息。提交详细信息后,代码将检查与数据库的连接,以查看是否输入了有效的详细信息。我希望它给出的变量结果是真的,如果连接起作用或起作用,比如:

$mysqli = new mysqli($_POST['dbHost'],$_POST['dbUser'],$_POST['dbPassword'],$_POST['dbName']);
if ($mysqli->connect_errno) { $badDetails = true; }
else { goodDetails = true; }
问题是,如果细节确实不正确,它会显示上面代码第一行的PHP警告,给出“未知MySQL服务器主机”

这是怎么回事?我不希望PHP为此抛出自己的可见错误,我想自己处理错误。

只需使用一个骰子


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

$con = @mysqli_connect( /* info */ );
请注意,您不应该将其保留在那里,因为这将抑制所有错误,并且mysqli可能有多个您可能需要了解的错误

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

$con = mysqli_connect(/* info */) or die ("SQL Error!");
至于要查看的位置,请尝试查看主机变量是否已实际设置并检查其值:

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

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

这是通过设置和配置的

许多框架使用自定义实现覆盖PHP错误处理程序,以便根据错误的严重性以一种非常漂亮的方式显示错误。 要实现这一点,您可以


可以注册常规错误和异常的自定义处理程序。而且还可能触发用户定义的错误。

这似乎合乎逻辑,但似乎对我不起作用。例如,当用户为数据库主机输入“asd”时,它会抛出错误:警告:mysqli::mysqli[mysqli.mysqli]:HY000/2005:未知的MySQL服务器主机“asd”@错误抑制是一种不好的做法,尤其是对于这种类型的错误。@NDM这就是为什么我说它是一个快速脏解决方案:。如果你不处理这个错误,这真的只能是一个糟糕的做法,不过对于mysqli来说,我想这肯定要糟糕得多,因为可能会发生很多错误。我会加上一个警告。谢谢你的回复,但我还是被卡住了。我不想抑制所有错误,所以您的第一个选择是禁止。使用die似乎不会停止显示数据库详细信息是否错误的警告。至于您的第三位代码,肯定是为主机输入了一个字符串,因为在用户输入数据库信息的表单上有验证。无论如何,请尝试打印它。dbHost变量是您所期望的吗?如果是这样的话,你能把它放在这里只是为了验证它整体上是正确的吗?为了测试的目的,我自己把变量放进去。例如,我故意输入了一个错误的主机名'asd',它创建了我不想显示的PHP警告。啊,对了,这很有意义!谢谢,当我把它全部上线时,我会确保把ERORR关掉。
if (!isset($_POST['dbHost'])) {
    echo "Host var not set!";
} else {
    echo "Host var set: " . $_POST['dbHost']
}