Обновить уже существующие значения при добавлении новых

0

Я вставляю некоторые значения в свою базу данных.

$stmt = $conn->prepare("INSERT INTO 'members' ('id', 'name', 'nickname', 'prefix', 'suffix') VALUES (?, ?, ?, ?, ?)");
$stmt->bind_param("sssss",$row['member_id'], $row['name'], $row['nickname'], $row['prefix'], $row['suffix']);
$stmt->execute();

Это делает то, что я хочу: если новый пользователь присоединился, это добавит их в члены. Однако, если уже существующий участник изменил свой ник, эта информация не будет обновлена. Я хотел бы: 1) добавить новых участников, как это происходит в настоящее время, но также 2) обновить псевдонимы для уже существующих участников, если есть какие-либо изменения.

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

$stmt = $conn->prepare("UPDATE members SET nickname = '?' WHERE id = '?'");
$stmt->bind_param("ss",$row['nickname'], $row['id']);
$stmt->execute();
  • 0
    просто избавиться от кавычек как .... nickname = ? WHERE id = ?
  • 0
    Хм. Похоже, это сработало, и теперь я удивляюсь, почему у меня они там были ... Спасибо!
Показать ещё 1 комментарий
Теги:
mysqli

1 ответ

0

Вы можете использовать REPLACE INTO вместо INSERT INTO Ваш prepare() будет иметь

REPLACE INTO 'members' ('id', 'name', 'nickname', 'prefix', 'suffix') VALUES (?, ?, ?, ?, ?)

REPLACE обновляет новые данные, если значение первичного ключа уже существует. Более подробная информация здесь: https://dev.mysql.com/doc/refman/5.5/en/replace.html

  • 0
    Спасибо за ответ. Проблема в том, что REPLACE INTO удаляет строку перед вставкой. У меня есть некоторые другие значения в базе данных, и я хотел бы заменить только один столбец, который изменяется, а не всю строку. Будет ли ON DUPLICATE KEY UPDATE делать эту работу?
  • 0
    Да. В этом случае вы можете использовать INSERT.. ON DUPLICATE KEY UPDATE .

Ещё вопросы

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