簡體   English   中英

mysql創建新行而不是更新現有行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM