所以我正在为我的网络应用程序设置一个安装程序,并有数据库凭据的输入字段。我的验证过程的一部分包括测试数据库连接(使用 PHP 的 PDO 库)。如果连接失败,我希望能够区分错误的密码、错误的地址、不存在的数据库名称等,以便我可以引用表单上正确的输入字段。
谁能指出我参考概述了 PDOException 返回的可能的错误代码/消息?
编辑:我想到这些错误代码/消息可能是特定于数据库的,而本机数据库代码/错误可能只是通过。如果是这种情况,我目前只使用 MySQL 5 数据库。
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 驱动程序,他们显然没有。
我不确定 PDO,但您可以使用mysql_error()
返回如下内容的函数:
- 用户youruser @ yourserver的访问被拒绝
- 无法选择数据库
- ...ETC
然后,您可以直接向用户显示这些错误,或者尝试获取所有可能错误的列表,并直接确定错误的原因。