1

我正在尝试为特定用户更新 bio 列,但我得到了一个新行。经历过类似的问题,但无法解决我的情况。

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";
            }
        }
    }
}
4

1 回答 1

9

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如果变量的值(s)来自外部,则查询很容易受到攻击。请看下面的文章,了解如何预防。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

于 2013-04-02T01:15:20.157 回答