2009-04-13 16 views
9

因此,我正在爲我的Web應用程序設置一個安裝程序,併爲數據庫憑證提供輸入字段。我的部分驗證過程包括測試數據庫連接(使用PHP的PDO庫)。如果連接失敗,我希望能夠區分錯誤的密碼,錯誤的地址,不存在的數據庫名稱等,以便我可以引用表單上正確的輸入字段。可能的PDOException錯誤(MySQL 5)?

Canone可以指向一個參考,概述使用PDOException返回的可能的錯誤代碼/消息嗎?

編輯:我想到這些錯誤代碼/消息可能是特定於數據庫的,並且本地數據庫代碼/錯誤可能會簡單地通過。如果是這種情況,我目前只使用MySQL 5數據庫。

回答

14

MySQL文檔是error codes的完整參考。

從1000開始的錯誤代碼是server errors。這些措施包括像錯誤:

  • 錯誤:1045 SQLSTATE:28000(ER_ACCESS_DENIED_ERROR) 消息:拒絕訪問用戶 '%s的' @ '%s' 的(使用密碼:%S)

  • 錯誤:1049 SQLSTATE:42000(ER_BAD_DB_ERROR) 消息:未知數據庫 '%s' 的

起始於2000錯誤碼是client errors。這些措施包括像錯誤:

  • 錯誤:2005(CR_UNKNOWN_HOST)消息:未知MySQL服務器主機 '%s' 的(%d)

  • 錯誤:2003(CR_CONN_HOST_ERROR)消息:無法連接到在「%s」的(%d)

我不會列出所有可能的錯誤,因爲他們已經記錄在案了,我不知道你需要處理哪些MySQL服務器。例如,錯誤2001和2002特定於UNIX套接字連接,這可能與您的目標平臺無關。

不要忘記使用PDO::errorCode()PDO::errorInfo()而不是簡單的PDOException消息。


重新發表您對getCode()的評論 - 不,似乎並未以此方式予以支持。我做了一個快速測試,到var_dump() a PDOException。不幸的是,即使錯誤代碼和SQLSTATE包含在異常消息中,它的代碼也很簡單「0」。

Exception::getCode()是PHP版本5.1.0的基類Exception類的一部分。這取決於相應的PDO驅動程序實現以利用此對象字段。至少對於MySQL驅動程序來說,他們顯然沒有。

+2

PDOException :: getCode()是否返回與PDO :: errorCode()相同的代碼? – Wilco 2009-04-13 17:53:24

-7

我不知道PDO,但你可以使用mysql_error()函數返回是這樣的:

  • Access denied for user youruser@yourserver
  • Unable to select database
  • ...etc

然後,您可以直接顯示這些錯誤給用戶,或玩獲取列表所有可能的錯誤,並直接確定錯誤的原因。