Отображение определенных сообщений об ошибках через 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 просто проверяет ЛЮБЫЕ повторяющиеся записи.

0

Решение

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

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

Повторяющаяся запись «% s» для ключа «% s»

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

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

Постскриптум Вы действительно хотите заблокировать дубликаты паролей?

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]