INSERT INTO ... ON DUPLICATE KEY UPDATE не обновляет дублирующее значение в PHP и mySQL - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь использовать функцию INSERT INTO ... ON DUPLICATE KEY для вставки некоторых данных в таблицу mySQL. И если уже есть пользователь, зарегистрированный с тем же адресом электронной почты, я хочу обновить значения.

Итак, я реализовал код ниже после поиска в этом обсуждении: ссылка-1 , ссылка-2 и другие ссылки ...

я тоже смотрел мануалы ссылка-4

$query=mysqli_query($conn,"INSERT INTO theElisa_signUp (name, email, telephone, user, psw, role, expire_date)
VALUES ('$name', '$email', 'not-set', '$username', '$password', '$role', '$expire_date')
ON DUPLICATE KEY
UPDATE name = '$name', user ='$username', psw = '$password', expire_date = '$expire_date' ");

Фактически, код может правильно вставить нового пользователя. Но если я пытаюсь обновить пользователя, который уже существует, он создает новую запись. Итак, у меня есть два пользователя, зарегистрированных на один и тот же адрес электронной почты (мне нужно обновить пользователя, если в таблице уже есть адрес электронной почты)

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

P.s. Я на самом деле веб-дизайнер с нулевым опытом в программировании, и этот проект выходит за рамки моих возможностей. Но, к сожалению, я должен решить этот вопрос. Спасибо.

Ответы [ 2 ]

1 голос
/ 02 апреля 2019

Адрес электронной почты столбца должен быть УНИКАЛЬНЫМ.

ALTER TABLE `theElisa_signUpADD` UNIQUE (email);
0 голосов
/ 02 апреля 2019

Вы можете использовать два запроса вот ссылка

$query=mysqli_query($conn,"INSERT INTO theElisa_signUp (name, email, telephone, user, psw, role, expire_date) VALUES ('$name', '$email', 'not-set', '$username', '$password', '$role', '$expire_date') ON DUPLICATE KEY UPDATE name = '$name',");
$query=mysqli_query($conn,"UPDATE theElisa_signUp SET user ='$username', psw = '$password', expire_date = '$expire_date' WHERE name = '$name' ");
...