Я вставляю некоторые значения в свою базу данных.
$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();
Вы можете использовать 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
ON DUPLICATE KEY UPDATE
делать эту работу?
INSERT.. ON DUPLICATE KEY UPDATE
.
.... nickname = ? WHERE id = ?