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

时间:2014-12-10 21:27:55

标签: php mysql-error-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只是检查任何重复的条目。

1 个答案:

答案 0 :(得分:0)

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

根据the manual,如果你有一个errno 1062,那么错误应该是这种格式的字符串:

  

键'%s'重复输入'%s'

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

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

P.S。你真的想要阻止重复密码吗?