可能的PDOException错误(MySQL 5)?

Wil*_*lco 9 php mysql database pdo

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

是否可以指向一个引用,该引用概述了PDOException返回的可能错误代码/消息?

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

Bil*_*win 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'上的MySQL服务器(%d)

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

不要忘记使用PDO::errorCode()PDO::errorInfo()不是简单地使用PDOException消息.


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

Exception从PHP 5.1.0版开始,Exception :: getCode()是基类的一部分.由相应的PDO驱动程序实现来使用该对象字段.至少对于MySQL驱动程序,他们显然没有.

  • PDOException :: getCode()是否返回与PDO :: errorCode()相同的代码? (2认同)