Ошибка записи повторяющейся таблицы

Так что я только начинаю работать с PHP / MySQL, и у меня возникла проблема при запуске следующего кода, который пытается вставить данные в таблицу. Ошибка вызвана, потому что у меня есть столбец имени пользователя, установленный, чтобы быть уникальным, и имя пользователя «ТЕСТ» уже использовалось. Можно ли написать оператор if, чтобы перехватить только ошибку, возникающую при создании дублирующейся записи?

    $sql = "INSERT INTO users (username, password, email)
VALUES ('$_SESSION[username]', '$_SESSION[password]', '$_SESSION[email]')";
if ($con->query($sql) === TRUE) {
echo "New record created successfully";}
else {echo "Error: " . $sql . "<br>" . $con->error;}

Я получаю ошибку:

Ошибка: INSERT INTO для пользователей (имя пользователя, пароль, адрес электронной почты) ЗНАЧЕНИЯ («ТЕСТ», «пароль», «[email protected]»)
Дублирующая запись ‘TEST’ для ключа ‘username’

1

Решение

Вы можете попробовать использовать INSERT IGNORE INTO users ... your query ..., Это не создаст ошибку, и после запроса вы должны проверить значение $con->affected_rows — если оно равно 0 затем был дубликат (оператор вставки не был выполнен и проигнорирован).

Проверить это, я могу быть не прав, но, насколько я помню, должно работать.

2

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

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

Кроме того, MySQL будет бомбить при первом сбое. Таким образом, если у вас есть user_name и e_mail как дубликаты, в сообщении будет возвращен только первый найденный дубликат.

РЕДАКТИРОВАТЬ: вот решение

Чтобы проверить эту конкретную ошибку, вам нужно найти код ошибки. это 1062 для дубликата ключа. Затем используйте результат из errno() сравнить с:

mysql_query('INSERT INTO ...');
if (mysql_errno() == 1062) {
echo'no way!';
}
2

Это потому, что у вас уже есть строка с этим значением. Пожалуйста, используйте готовые заявления, никто не хочет страдать от взломанных сайтов.

0

Без большего количества кода нет четкого способа узнать, какую библиотеку sql вы используете. У большинства есть какая-то ошибка код это идет с ошибкой сообщение. Если вы можете определить, что у вас может быть выстрел.

Правдиво? Измените свой запрос, чтобы устранить проблему с дублирующимся именем, или проверьте его перед созданием.

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