0

我有一个将用户从注册表单插入数据库的类。我要插入 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 只是检查任何重复的条目。

4

1 回答 1

1

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

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

键“%s”的重复条目“%s”

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

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

PS你真的想阻止重复的密码吗?

于 2014-12-14T13:10:02.043 回答