通过 errno 1062 显示特定错误消息


Displaying Specific Error Messages Via Errno 1062

我有一个类,可以将用户从注册表单插入到数据库中。 我插入了4件事:用户名,密码,盐和电子邮件。 我正在使用 errno 1062 来检查重复的条目。 但是我需要检查特定的重复条目。 例如,我有这个逻辑来检查errno 1062,但它实际上并不特定于正在检查的用户名,它只是检查errno并假设它是重复的用户名。

    if ($stmt->affected_rows == 1) {
        $this->success = "$this->username has registered.  You can now log in.";
    } elseif ($stmt->errno == 1062) {
        $this->errors[] = "$this->username is already in use.  Please chose another.";
    } else {
        $this->errors[] = 'Sorry, there was an issue with the database.';
    }

我的问题是,如何使用errno 1062来检查用户名,电子邮件或两者? 似乎 errno 1062 只是检查任何重复的条目。

errno 只返回一个整数,没有关于发生什么错误的其他信息,但您应该能够使用 error 获取更多信息。

根据手册,如果您有 errno 1062,错误应该是以下格式的字符串:

键 '%s' 的重复条目 '%s'

您可以使用普通的 PHP 字符串函数解析该字符串以获取所需的数据。 如果您有多个错误,它只会"抱怨"它发现的第一个错误(至少在我的服务器上),所以请注意,您最终可能会要求用户修复一件事,然后回来纠正另一件事,等等。我知道改进它的唯一方法是运行单独的简单查询:

SELECT COUNT(*) FROM table WHERE email = 'test@email.com'

附言您真的要阻止重复的密码吗?