可能的PDOException错误(MySQL 5)?

时间:2009-04-13 17:19:49

标签: php mysql database pdo

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

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

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

2 个答案:

答案 0 :(得分:15)

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

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

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


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

从PHP 5.1.0开始,

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

答案 1 :(得分:-8)

我不确定PDO,但你可以使用返回这样的mysql_error()函数:

  
      
  • 拒绝用户访问您的用户 @ 您的
  •   
  • 无法选择数据库
  •   
  • ...等
  •   

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