【问题标题】:Possible PDOException Errors (MySQL 5)?可能的 PDOException 错误(MySQL 5)?
【发布时间】:2009-04-13 17:19:48
【问题描述】:

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

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

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

【问题讨论】:

    标签: php mysql database pdo


    【解决方案1】:

    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 做了一个快速测试。不幸的是,它的代码是简单的“0”,即使错误代码和 SQLSTATE 包含在异常消息中。

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

    【讨论】:

    • PDOException::getCode() 是否返回与 PDO::errorCode() 相同的代码?
    • 根据php.net/manual/en/…PDO->getCode()方法应该返回SQLSTATE错误码。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-05-11
      • 2014-08-25
      • 2015-09-20
      • 2016-01-10
      • 2023-03-11
      • 2019-04-24
      • 2018-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多