gpt4 book ai didi

php - 在没有默认数据库和无效凭据的情况下连接到 mysql 不会给出错误

转载 作者:行者123 更新时间:2023-11-29 12:13:47 27 4
gpt4 key购买 nike

我正在尝试为我的网页之一创建安装脚本。该过程将执行如下:连接MySQL、创建数据库、创建表等。

但是,当我在连接到 MtSQL 期间使用提供的空数据库和无效的用户名/密码进行一些错误处理时,连接中没有错误:

$connection = new mysqli( "localhost", "rootaaa", "", "" );
echo $connection->connect_errno;

在我提供一些默认数据库后,弹出错误消息:

$connection = new mysqli( "localhost", "rootaaa", "", "mysql" );
echo $connection->connect_errno;

Warning: mysqli::mysqli(): (HY000/1044): Access denied for user ''@'localhost' to database 'mysql' in ...t_postinstall.php on line 18

查看 http://php.net/manual/en/mysqli.construct.php参数dbname定义为:

dbname: If provided will specify the default database to be used when performing queries.

因此有可能将数据库留空。

有人可以解释一下,为什么如果我提供无效的凭据,我不会收到错误消息?

我使用的是 PHP 5.6.3 和 mySQL 5.6.21。

最佳答案

您的服务器上可能有 rootaaa 用户,但该用户无权访问 mysql 数据库。

MySQL 允许在不指定默认数据库的情况下连接到服务器(例如,请参阅 c 库的 manual,它也由我的 msqli 包装)。因此,如果用户存在,您指定了其凭据,但没有指定数据库,用户可以连接到服务器(它可能仍然有一些权限在那里做某事),并且连接不会产生任何错误消息。

例如:

$ mysql -u root -p
Welcome to the MySQL monitor. Commands end with ; or \g.
...
mysql> create user 'rootaaa';

mysql> select user,host,password from mysql.user where user='rootaaa';
+---------+------+----------+
| user | host | password |
+---------+------+----------+
| rootaaa | % | |
+---------+------+----------+

$ mysql -u rootaaa test
ERROR 1044 (42000): Access denied for user 'rootaaa'@'%' to database 'test'

$ mysql -u rootaaa
Welcome to the MySQL monitor. Commands end with ; or \g.
...

如果您授予用户访问数据库的权限...

$ mysql -u root -p
Welcome to the MySQL monitor. Commands end with ; or \g.
...
mysql> grant all on test.* to 'rootaaa'@'%';

$ mysql -u rootaaa test
Welcome to the MySQL monitor. Commands end with ; or \g.
...

关于php - 在没有默认数据库和无效凭据的情况下连接到 mysql 不会给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30209884/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com