9

所以我正在为我的网络应用程序设置一个安装程序,并有数据库凭据的输入字段。我的验证过程的一部分包括测试数据库连接(使用 PHP 的 PDO 库)。如果连接失败,我希望能够区分错误的密码、错误的地址、不存在的数据库名称等,以便我可以引用表单上正确的输入字段。

谁能指出我参考概述了 PDOException 返回的可能的错误代码/消息?

编辑:我想到这些错误代码/消息可能是特定于数据库的,而本机数据库代码/错误可能只是通过。如果是这种情况,我目前只使用 MySQL 5 数据库。

4

2 回答 2

15

MySQL 文档是错误代码的完整参考。

从 1000 开始的错误代码是服务器错误。其中包括以下错误:

  • 错误:1045 SQLSTATE: 28000 ( ER_ACCESS_DENIED_ERROR) 消息:用户'%s'@'%s'的访问被拒绝(使用密码:%s)

  • 错误:1049 SQLSTATE: 42000 ( ER_BAD_DB_ERROR) 消息:未知数据库'%s'

从 2000 开始的错误代码是客户端错误。其中包括以下错误:

  • 错误:2005 ( CR_UNKNOWN_HOST) 消息:未知的 MySQL 服务器主机 '%s' (%d)

  • 错误:2003 ( CR_CONN_HOST_ERROR) 消息:无法连接到 '%s' (%d) 上的 MySQL 服务器

我不会列出所有可能的错误,因为它们已经记录在案,而且我不知道您需要处理哪些错误。例如,错误 2001 和 2002 特定于 UNIX 套接字连接,这可能与您的目标平台无关。

不要忘记使用PDO::errorCode()andPDO::errorInfo()而不是简单的PDOException消息。


重新评论您的评论getCode()- 不,它似乎不受这种方式的支持。我做了一个快速测试,var_dump()PDOException. 不幸的是,即使错误代码和 SQLSTATE 包含在异常消息中,它的代码也是简单的“0”。

Exception::getCode()是基Exception类的一部分,从 PHP 5.1.0 开始。使用此对象字段取决于各自的 PDO 驱动程序实现。至少对于 MySQL 驱动程序,他们显然没有。

于 2009-04-13T17:46:14.863 回答
-9

我不确定 PDO,但您可以使用mysql_error()返回如下内容的函数:

  • 用户youruser @ yourserver的访问被拒绝
  • 无法选择数据库
  • ...ETC

然后,您可以直接向用户显示这些错误,或者尝试获取所有可能错误的列表,并直接确定错误的原因。

于 2009-04-13T17:42:43.280 回答