可能的 PDOException 错误(MySQL 5)?

发布于 2024-07-16 20:14:17 字数 307 浏览 3 评论 0原文

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

有人可以向我指出一个参考资料,其中概述了随 PDOException 返回的可能的错误代码/消息吗?

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

So I'm setting up an installer for my web app, and have input fields for database credentials. Part of my validation process includes testing the database connection (using PHP's PDO library). If the connection fails, I want to be able to differentiate between a bad password, bad address, nonexistent database name, etc. so I can reference the proper input field on the form.

Can anone point me towards a reference that outlines the possible error codes/messages that are returned with a PDOException?

Edit: It occurred to me that these error codes/messages are probably database-specific and the native database codes/errors may simply be getting passed through. If this is the case, I am currently only working with MySQL 5 databases.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

安穩 2024-07-23 20:14:17

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()< /a> 和 PDO::errorInfo() 而不是简单的 PDOException 消息。


重新回复您对 getCode() 的评论——不,似乎不支持这种方式。 我做了一个快速测试,发现 var_dump() 出现 PDOException。 不幸的是,尽管错误代码和 SQLSTATE 包含在异常消息中,但它的代码只是简单的“0”。

Exception::getCode() 是基本 Exception< 的一部分/code> 类,从 PHP 版本 5.1.0 开始。 利用该对象字段取决于相应的 PDO 驱动程序实现。 至少对于 MySQL 驱动程序来说,他们显然没有。

The MySQL documentation is the complete reference for error codes.

Error codes starting at 1000 are server errors. These include errors like:

  • Error: 1045 SQLSTATE: 28000 (ER_ACCESS_DENIED_ERROR)
    Message: Access denied for user '%s'@'%s' (using password: %s)

  • Error: 1049 SQLSTATE: 42000 (ER_BAD_DB_ERROR)
    Message: Unknown database '%s'

Error codes starting at 2000 are client errors. These include errors like:

  • Error: 2005 (CR_UNKNOWN_HOST) Message: Unknown MySQL server host '%s' (%d)

  • Error: 2003 (CR_CONN_HOST_ERROR) Message: Can't connect to MySQL server on '%s' (%d)

I'm not going to list all possible errors, because they're already documented, and I don't know which ones you need to handle. For instance, errors 2001 and 2002 are specific to UNIX socket connections, which may be irrelevant to your target platform.

Don't forget to use PDO::errorCode() and PDO::errorInfo() instead of simply the PDOException message.


Re your comment about getCode() -- No, it doesn't seem to be supported in that way. I did a quick test, to var_dump() a PDOException. Unfortunately, its code is simple "0" even though the error code and SQLSTATE are included in the exception message.

Exception::getCode() is part of the base Exception class, as of PHP version 5.1.0. It's up to the respective PDO driver implementation to utilize this object field. At least for the MySQL driver, they apparently didn't.

美人迟暮 2024-07-23 20:14:17

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

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

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

I'm not sure about PDO, but you can use the mysql_error() function which returns something like this:

  • Access denied for user youruser@yourserver
  • Unable to select database
  • ...etc

You could then display these errors directly to the user, or play around to get a list of all possible errors, and determine the cause of the error directly.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文