Так что я только начинаю работать с 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’
Вы можете попробовать использовать INSERT IGNORE INTO users ... your query ...
, Это не создаст ошибку, и после запроса вы должны проверить значение $con->affected_rows
— если оно равно 0
затем был дубликат (оператор вставки не был выполнен и проигнорирован).
Проверить это, я могу быть не прав, но, насколько я помню, должно работать.
MySQL возвращает ошибку в виде числа, состояния и сообщения. Без разбора сообщения вы не сможете определить, какой столбец дублируется.
Кроме того, MySQL будет бомбить при первом сбое. Таким образом, если у вас есть user_name и e_mail как дубликаты, в сообщении будет возвращен только первый найденный дубликат.
РЕДАКТИРОВАТЬ: вот решение
Чтобы проверить эту конкретную ошибку, вам нужно найти код ошибки. это 1062
для дубликата ключа. Затем используйте результат из errno()
сравнить с:
mysql_query('INSERT INTO ...');
if (mysql_errno() == 1062) {
echo'no way!';
}
Это потому, что у вас уже есть строка с этим значением. Пожалуйста, используйте готовые заявления, никто не хочет страдать от взломанных сайтов.
Без большего количества кода нет четкого способа узнать, какую библиотеку sql вы используете. У большинства есть какая-то ошибка код это идет с ошибкой сообщение. Если вы можете определить, что у вас может быть выстрел.
Правдиво? Измените свой запрос, чтобы устранить проблему с дублирующимся именем, или проверьте его перед созданием.