2009-11-13 54 views
0

切換我從使用SQLite到MySQL交換我的應用程序時,MySQL的錯誤。它與SQLite一起工作,現在它不能工作,我已經改變它使用MySQL。以下是我收到的錯誤消息:Zend框架:認證,從SQLite的

Message: SQLSTATE[HY000] [2000] mysqlnd cannot connect to MySQL 4.1+ using old authentication 

這是什麼意思?

注意:我正在運行本地運行的Snow Leopard,嘗試訪問遠程數據庫。

它也將我的用戶名和密碼以明文形式轉儲到請求參數中的屏幕上,這有點令人不安。

+0

DB用戶名和密碼是一個原因,錯誤不應該在生產服務器上顯示。 – 2009-11-13 04:50:43

+0

不是數據庫用戶名/密碼,我的應用程序的用戶登錄憑據。另外,這不在生產服務器上運行。就在我的電腦上並處於開發模式。在生產模式下關閉錯誤。 – Andrew 2009-11-13 05:09:21

回答

0

安德魯,我認爲你有問題,使用舊的認證您的MySQL客戶端。

您應該確保您的PDO使用最後一個mysqlclient庫。

您可能需要首先測試一個PDO樣本,以確保一切正常並且在使用ZF後。

$db = new PDO("mysql:host=$host;dbname=$database", 
      $username, $password); 

在您的評論對Usernamer /密碼,Zend框架文檔指出,是開發商無法通過設置在生產和開發不同級別的配置,以顯示這些錯誤給用戶。 Zend_config是有那個,再加上error catching controller

+0

這不在生產服務器上運行。就在我的電腦上並處於開發模式。因此,display_errors將在生產模式下關閉。 – Andrew 2009-11-13 05:11:40

+0

那麼,我的MySQL服務器是舊的?或者我的PDO_MYSQL是舊的? Zend Framework中的PDO_MYSQL,本地PHP安裝還是本地MySQL安裝? – Andrew 2009-11-13 05:13:25

+0

我嘗試了我的生產服務器上的應用程序,但我沒有收到問題。我需要做什麼,以我的結束(本地)更新所以這個錯誤不會再次發生 – Andrew 2009-11-13 05:26:36

4

你運行PHP 5.3? mysqlnd是PHP新的原生MySQL驅動(ext/mysqlext/mysqliPDO利用它,所以它不是一個新的API,但一種新的方式三個不同的API如何與MySQL服務器通信) - here是一個很好的文章關於mysqlnd

現在的問題是,您的MySQL服務器使用old authentication mechanism其中mysqlnd不能遵守。 mysqlnd需要一個與MySQL 4.1中引入了新的41個字節的密碼(所以你不能連接到MySQL服務器< 4.1)。要更新您的用戶表工作,你必須到你的MySQL服務器上使用SET PASSWORD命令新的密碼方案,例如:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('mypassword'); 

這改變了密碼方案,將讓你與mysqlnd連接。 Here Thomas Rabaix描述了完全相同的問題 - 僅供參考。

0

使用此解決你的問題:)

SET SESSION old_passwords = 0; 
SELECT @@global.old_passwords, @@session.old_passwords, Length(PASSWORD('abc')); 
SET PASSWORD = PASSWORD('abc') 

好運