无法使用Yii Framework连接数据库

hmtdttj4  于 2022-11-09  发布在  其他
关注(0)|答案(3)|浏览(350)

我尝试在远程服务器上运行应用程序,然后通过计算机的浏览器连接此Web应用程序。在连接到数据库时出现错误。
错误消息为:CDbConnection failed to open the DB connection: SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES) .
我看到了很多解决方案,并尝试了它,但没有任何帮助。
目前的操作系统是Ubuntu 18.04,nginx版本是nginx/1.14.0 (Ubuntu),php版本是5.6.40,mysql版本是5.7.24,yii版本是1.1.19。所有这些堆栈都安装在远程服务器上。
到目前为止我已经尝试过的;我已经检查过该用户已经存在。SELECT user, host FROM mysql.user;

  1. | user | host |
  2. +-------------------+---------------+
  3. | root | 127.0.0.1 |
  4. | root | localhost |
  5. +-------------------+---------------+

没关系。
我已经检查了mysql运行端口。

  1. mysql> SHOW GLOBAL VARIABLES LIKE 'PORT';
  2. +---------------+-------+
  3. | Variable_name | Value |
  4. +---------------+-------+
  5. | port | 3306 |
  6. +---------------+-------+

我已经检查过授予权限;

  1. mysql> SHOW GRANTS For root@localhost;
  2. +----------------------------------------------------------------+
  3. | Grants for root@localhost
  4. |
  5. +----------------------------------------------------------------+
  6. | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION
  7. | GRANT SELECT ON `root`.* TO 'root'@'localhost'
  8. |GRANT ALL PRIVILEGES ON `xxxx`.* TO 'root'@'localhost'
  9. | GRANT SELECT ON `xxxx`.* TO 'root'@'localhost'
  10. | GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
  11. +------------------------------------------------------------------+
  12. mysql> SHOW GRANTS FOR CURRENT_USER();
  13. +-----------------------------------------------------------------+
  14. | Grants for root@127.0.0.1 |
  15. +-----------------------------------------------------------------+
  16. | GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION
  17. |
  18. | GRANT ALL PRIVILEGES ON `xxxx`.* TO
  19. 'root'@'127.0.0.1' |
  20. +----------------------------------------------------------------------+

在php端,有一些文件被环境分开。例如:php、测试. php。
我已经触发了运行development.php,它包含了一个连接字符串:

  1. db' => array(
  2. 'connectionString' => 'mysql:host=127.0.0.1;dbname=xxxx',
  3. 'enableParamLogging' => $profiling,
  4. 'enableProfiling' => $profiling,
  5. 'schemaCachingDuration' => 0,
  6. ),

用户名和密码由另一个php文件加载,如下所示:

  1. 'db' => array(
  2. 'class' => 'DbConnection',
  3. 'emulatePrepare' => true,
  4. 'username' => 'root',
  5. 'password' => 'xxxx',
  6. 'charset' => 'utf8',
  7. 'schemaCachingDuration' => 7200,
  8. ),

一切看起来都很正常。我也可以为那个用户和密码连接mysql终端,就像这样:mysql -u root -p -h 127.0.0.1
但当我在浏览器中键入网址时,它会给出:CDbConnection failed to open the DB connection: SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES)错误,但我找不到解决方法。

rjjhvcjd

rjjhvcjd1#

也许尝试localhost而不是127.0.0.1

  1. return array(
  2. 'class' => 'CDbConnection',
  3. 'connectionString' => "mysql:host=localhost;dbname=xxxxx;port=3306",
  4. 'emulatePrepare' => true,
  5. 'username' => 'root',
  6. 'password' => 'xxxx',
  7. 'charset' => 'utf8',
  8. 'enableProfiling' => true,
  9. 'enableParamLogging' => true
  10. );
qncylg1j

qncylg1j2#

我找到解决办法了。
有一个配置我搞不懂,在应用程序中,密码定义了不止一次,还有人用ArrayHelper::merge来合并。
所以,我认为密码存储在一个名为array1的数组中。但是已经在array2中定义了
在使用ArrayHelper::merge($array1, $array2);时,array2覆盖了array1,我想了很久都没弄明白,谢谢你的帮助。

mqkwyuun

mqkwyuun3#

添加以下行,并检查XAMMP MySql服务器是否已启动(有时xammp连接不同的数据库)。

  1. return [
  2. 'class' => 'yii\db\Connection',
  3. 'dsn' => 'mysql:host=localhost;dbname=xxx',
  4. 'username' => 'root',
  5. 'password' => 'xxx',
  6. 'charset' => 'utf8',
  7. ];

相关问题