无法使用Yii Framework连接数据库

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

我尝试在远程服务器上运行应用程序,然后通过计算机的浏览器连接此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;

| user              | host          |
    +-------------------+---------------+
    | root              | 127.0.0.1     |
    | root              | localhost     |
    +-------------------+---------------+

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

mysql> SHOW GLOBAL VARIABLES LIKE 'PORT';
 +---------------+-------+
 | Variable_name | Value |
 +---------------+-------+
 | port          | 3306  |
 +---------------+-------+

我已经检查过授予权限;

mysql> SHOW GRANTS  For root@localhost;
+----------------------------------------------------------------+
| Grants for root@localhost                                            
|
+----------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION                     
| GRANT SELECT ON `root`.* TO 'root'@'localhost'            
|GRANT ALL PRIVILEGES ON `xxxx`.* TO 'root'@'localhost'
| GRANT SELECT ON `xxxx`.* TO 'root'@'localhost'   
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION     |
+------------------------------------------------------------------+

mysql> SHOW GRANTS FOR CURRENT_USER();
+-----------------------------------------------------------------+
| Grants for root@127.0.0.1                                       |
+-----------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION  
|
| GRANT ALL PRIVILEGES ON `xxxx`.* TO 
'root'@'127.0.0.1' |
+----------------------------------------------------------------------+

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

db' => array(
 'connectionString' => 'mysql:host=127.0.0.1;dbname=xxxx',
         'enableParamLogging' => $profiling,
         'enableProfiling' => $profiling,
         'schemaCachingDuration' => 0,
     ),

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

'db' => array(
         'class' => 'DbConnection',
         'emulatePrepare' => true,
         'username' => 'root',
         'password' => 'xxxx',
         'charset' => 'utf8',
         'schemaCachingDuration' => 7200,

     ),

一切看起来都很正常。我也可以为那个用户和密码连接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

return array(
    'class'              => 'CDbConnection',
    'connectionString'   => "mysql:host=localhost;dbname=xxxxx;port=3306",
    'emulatePrepare'     => true,
    'username'           => 'root',
    'password'           => 'xxxx',
    'charset'            => 'utf8',
    'enableProfiling'    => true,
    'enableParamLogging' => true
);
qncylg1j

qncylg1j2#

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

mqkwyuun

mqkwyuun3#

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

return [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=localhost;dbname=xxx',
    'username' => 'root',
    'password' => 'xxx',
    'charset' => 'utf8',
];

相关问题