簡體   English   中英

CDbConnection無法打開數據庫連接Yii

[英]CDbConnection failed to open the DB connection 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()函數framework / 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.

我的PHP版本5.5.36 Mysql版本5.5.35我的主機是i-page dot com Yii版本'1.1.13'感謝您的幫助。

密碼的哈希方式以及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版本。

我在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,則數據庫緩存默認為/ protected / data目錄中的mysqli數據庫,如果系統上未安裝mysqli驅動程序,則無法訪問(專用服務器,DO Drops,xampp / wamp等常見問題)

或者,您可以禁用數據庫緩存並啟用fileCache。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM