我正在尝试为特定用户更新生物列,但我得到了一个新行。通过类似的问题,但无法解决我的情况。
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";
}
}
}
}
答案 0 :(得分:8)
如果值已存在,您可以直接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';
作为旁注,如果变量的值( s )来自外部,则查询易受SQL Injection
攻击。请查看下面的文章,了解如何防止它。通过使用PreparedStatements
,您可以摆脱在值周围使用单引号。