CDbConnection无法打开数据库连接Yii

时间:2014-04-02 15:00:19

标签: php mysql yii

当我尝试用清晰的PHP连接到mysql时,它的工作正常。 我的代码

$link = mysql_connect('hostname', 'username', 'password'); 
if (!$link) { 
      die('Could not connect'); 
} 
if(mysql_select_db('dbname')){
      echo 'Connected successfully'; 
}

但是当我试图用yii连接时,那么得到错误

我的config / main.php

'db'=>array(
    'class'=>'CDbConnection',
    'connectionString' => 'mysql:host=hostname;dbname=dbname',
    'emulatePrepare' => true,  /* I try false too*/
    'username' => 'username',
    'password' => 'password',
    'charset' => 'utf8',
),

这是我在open()函数框架/ db / CDbConnection.php中打印的异常的输出 这里有例外处理

protected function open()
{
    if($this->_pdo===null)
    {
        if(empty($this->connectionString))
            throw new CDbException('CDbConnection.connectionString cannot be empty.');
        try
        {
            Yii::trace('Opening DB connection','system.db.CDbConnection');
            $this->_pdo=$this->createPdoInstance();
            $this->initConnection($this->_pdo);
            $this->_active=true;
        }
        catch(PDOException $e)
        {
        echo '<pre>';
        var_dump($e); die;
            if(YII_DEBUG)
            {
                throw new CDbException('CDbConnection failed to open the DB connection: '.
                    $e->getMessage(),(int)$e->getCode(),$e->errorInfo);
            }
            else
            {
                Yii::log($e->getMessage(),CLogger::LEVEL_ERROR,'exception.CDbException');
                throw new CDbException('CDbConnection failed to open the DB connection.',(int)$e->getCode(),$e->errorInfo);
            }
        }
    }
}

例外文字

"SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client"

我在显示屏中看到

 CDbException

CDbConnection failed to open the DB connection.

My PHP VERSION 5.5.36 Mysql版本5.5.35 我的主机是i-page dot com Yii版本'1.1.13' 谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

密码的散列方式以及MySQL和MYSQL_PDO库的版本似乎存在问题。

Yii使用PDO查询数据库,这就是为什么清除PHP就像魅力一样,而Yii却没有。

要验证这一点,请尝试以下操作:

$mysqlConnection = new PDO("mysql:host=hostname;dbname= dbname", "username", "password");

此行应抛出以下错误:

  

PDO :: __ construct():服务器请求的客户端未知的身份验证方法[mysql_old_password]。

此错误相当于MySQL 2045:

  

“SQLSTATE [HY000] [2054]服务器请求客户端未知的身份验证方法

如果您确认问题与PDO有关,则您有多个选项,但您需要访问托管系统(或要求他们解决问题):

  • 登录MySQL并执行以下命令SET PASSWORD FOR 'username'@'hostname' = OLD_PASSWORD('password');(这将修复密码的散列)
  • 升级MYSQL PDO库(PDO_MYSQL)以匹配服务器上的MYSQL版本。

答案 1 :(得分:0)

我在Yii 1.1.x项目中遇到了这个问题而且几乎疯了:

首先确保你有

sudo apt install php-xml php-mbstring php-pdo php-mysql 

安装,然后重启apache

sudo apachectl restart

或:

sudo service apache2 restart

详细错误是无法找到数据库

我的解决方案与缓存有关:

cache' => array(
    'class' => 'system.caching.CDbCache',
    //'class' => 'system.caching.CFileCache',
    'connectionID'=>'db', // <<< THIS IS THE ISSUE
),

如果未设置connectionID,则db缓存默认为/ protected / data目录中的mysqli数据库,如果系统上未安装mysqli驱动程序,则无法访问该数据库(常见问题与专用服务器,DO drop,xampp / wamp ......)

或者,您可以禁用数据库缓存并改为启用fileCache。