无法使用Yii Framework连接数据库

时间:2019-06-11 13:56:46

标签: php mysql yii

我试图在远程服务器上运行应用程序,然后通过计算机的浏览器连接此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端,有一些文件由环境分隔。例如:development.php,test.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

但是当我在浏览器中键入URL时,它给出了: CDbConnection failed to open the DB connection: SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES) 错误,我找不到解决方法。

3 个答案:

答案 0 :(得分:0)

也许尝试使用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
);

答案 1 :(得分:0)

我找到了解决方案。

有一个我无法弄清楚的配置。在应用程序中,密码定义了多个。有些人使用ArrayHelper::merge合并它。

因此,我认为密码存储在名为array1的数组中。但已经在array2

中定义了

使用ArrayHelper::merge($array1, $array2);时,array2已覆盖array1。 我很长一段时间都想不通。 感谢您的帮助。

答案 2 :(得分:-1)

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

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