Я пытаюсь обновить био столбца для конкретного пользователя, но вместо этого получаю новую строку. Были схожие вопросы, но не могли бы разобраться в моей ситуации.
if (isset($_SESSION['logged_in']) && $_SESSION['name_of_user'] == $profile_name) { $pageOwner = true; } if (isset($_POST['submit'])) { $bio = $_POST['bio']; if (empty($bio)) { $error = "Missing Bio"; } else { if ($member_bio->num_rows == 1) { if ($query = $db->query("UPDATE user_account SET 'bio'='$bio' WHERE 'id_user'='$id'")) { $ok_mesg = "Profile has been updated!!!"; } else { $error = "ERROR on our end"; } } else { if ($query = $db->query("INSERT INTO user_account (bio) VALUES('$bio')")) { $ok_msg = "Profile has been updated"; } else { $error = "Error on our end"; } } } }
Вы можете напрямую UPDATE
если значение уже существует или INSERT
если оно не существует, используя INSERT...ON DUPLICATE KEY UPDATE
Но сначала вам нужно указать уникальный столбец,
ALTER TABLE user_account ADD CONSTRAINT tb_uq UNIQUE (id_user)
если столбец ID_USER
уже является первичным ключом, то пропустите первый метод. После того, как он был реализован, вы можете использовать следующий синтаксис
INSERT INTO user_account (id_user, bio) VALUES($id, '$bio') ON DUPLICATE KEY UPDATE bio = '$bio';
В качестве побочного элемента запрос уязвим с помощью SQL Injection
если значение (значения) переменных было получено извне. Пожалуйста, ознакомьтесь с приведенной ниже статьей, чтобы узнать, как ее предотвратить. Используя PreparedStatements
вы можете избавиться от использования одинарных кавычек вокруг значений.