为啥即使我传递了错误的用户名,mysqli_connect() 也会返回 true?

Posted

技术标签:

【中文标题】为啥即使我传递了错误的用户名,mysqli_connect() 也会返回 true?【英文标题】:why mysqli_connect() returning true even I passing wrong username?为什么即使我传递了错误的用户名,mysqli_connect() 也会返回 true? 【发布时间】:2017-10-17 04:39:39 【问题描述】:

这是我的代码。

<?php
    $server = "localhost";
    $uname = "replace it with anything";
    $pswd = "";

    $conn = mysqli_connect($server, $uname, $pswd);

    if(!$conn)
        die('Caught');
    
    else
        die('Connected');
       
?>

不管我在mysqli_connect() 中作为用户名 传递了什么。它总是返回true。在密码错误的情况下,显示访问被拒绝的错误,但我不知道为什么,无论我在用户名中输入什么,它总是返回true。

【问题讨论】:

【参考方案1】:

它不返回一个布尔值,而是一个表示连接的对象。然后,您可以检查对象的连接性。来自手册:

<?php
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');

/*
 * This is the "official" OO way to do it,
 * BUT $connect_error was broken until PHP 5.2.9 and 5.3.0.
 */
if ($mysqli->connect_error) 
    die('Connect Error (' . $mysqli->connect_errno . ') '
            . $mysqli->connect_error);

【讨论】:

另外值得注意的是面向对象的方法 (new mysqli(...)) 比程序替代方法要简洁得多。【参考方案2】:

试试

   <?php
$mysqli = new mysqli("host", "username", "password", "database") or die($mysqli->error());

if ($mysqli->connect_errno) 
echo "error";
exit();


    ?>

【讨论】:

以上是关于为啥即使我传递了错误的用户名,mysqli_connect() 也会返回 true?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Nginx 即使使用 root 用户也会返回 403 Forbidden 错误

为啥从 jquery 传递给控制器​​方法的参数即使不是 null 也是 null?

为啥传递给函数的协议默认值不会改变,即使函数在子类化时会改变?

为啥即使实现了 Iterable,我也会收到 foreach 编译器错误?

为啥我在模式静态方法上定义的错误消息没有显示,即使错误处理显然有效?

即使我有 session_start(); 我的会话变量也不会传递到我的其他页面;在所有 3 页的开头。为啥是这样?