Отображение определенных сообщений об ошибках через Errno 1062

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 просто проверяет ЛЮБЫЕ дубликаты записей.

  • 0
    Не уверен, что вы спрашиваете здесь. Вы пробовали использовать неповторяющееся имя пользователя с повторяющимся адресом электронной почты и наоборот?
Теги:
mysql-error-1062

1 ответ

0
Лучший ответ

errno возвращает целое число без каких-либо других сведений о произошедшей ошибке, но вы можете использовать ошибку для получения дополнительной информации.

Согласно руководству, если у вас есть errno 1062, ошибка должна быть строкой в этом формате:

Дублируемая запись '% s' для ключа '% s'

Вы можете проанализировать эту строку, чтобы получить нужные данные, используя обычные строковые функции PHP. Если у вас более одной ошибки, он будет "жаловаться" только на первый найденный (по крайней мере, на моих серверах), поэтому имейте в виду, что вы можете попросить пользователя исправить одну вещь, затем вернуться, чтобы исправить другую и т.д. Единственный способ, который я знаю, чтобы улучшить это, - это запустить отдельные простые запросы:

SELECT COUNT(*) FROM table WHERE email = '[email protected]'

PS Вы действительно хотите блокировать повторяющиеся пароли?

  • 0
    Я не блокирую двойные пароли. Я блокирую dup u / n и электронную почту.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню