为啥即使我传递了错误的用户名,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 编译器错误?