[英]mysql creates a new row instead of updating existing
我正在嘗試為特定用戶更新簡歷欄,但我得到了新的一行。 經歷過類似的問題,但無法弄清楚我的處境。
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";
}
}
}
}
您可以通過使用INSERT...ON DUPLICATE KEY UPDATE
直接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
您可以擺脫在值周圍使用單引號的麻煩。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.