简单的重复密钥更新?

我试图在mySQL数据库中存储一对多关系,并且我想尽可能避免重复条目。

我在网上阅读,看到'重复密钥更新'是一个选项。 这是否适合我的情况?

码:

function insert_options($uid, $array) {
    if(!is_array($array)) {
        return false;
    }
    $db = db_connect();
    foreach($array as $a) {
        $sql = 'INSERT INTO newsletter_coupon_codes_options (uid, option_name, value) VALUES (?, ?, ?)';
        $stmt = $db->prepare($sql);
        if($stmt === false) {
            echo "Prepare failed: (" . $db->errno . ") " . $db->error;
        }
        $stmt->bind_param('iss', $uid, $a, $value);
        $value = '1';
        $stmt->execute();
    }
}

UID(INT11), OPTION_NAME(varchar(255)), VALUE(INT(11))

我试图在$sql语句中添加ON DUPLICATE KEY UPDATE value = 1 ,但它似乎没有做任何事情。 基本上我想确保当我插入数据时,如果uidoption_name存在,它只是将value设置为1 ,并且不会创建新条目。

我没有设置唯一的密钥,只有uid上的主键。 我不知道做什么独特。 我无法使uid独一无二,因为每个uid都会有多个条目。 我也不能让option_name唯一,因为对于多个uid ,会有相同的option_name

什么是完成这个最好的方法?


将您的查询改为

INSERT INTO newsletter_coupon_codes_options (uid, option_name, value) 
VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE value = VALUES(value)

这里是SQLFiddle演示

确保(uid, option_name)上有UNIQIEPRIMARY KEY约束,例如

ALTER TABLE newsletter_coupon_codes_options 
  ADD UNIQUE (uid, option_name);

请更改您的查询,并使用mysqli_query函数执行此类查询并使用mysqli_real_escape_string函数来避免SQL注入

$sql = 'INSERT INTO newsletter_coupon_codes_options 
     (uid, option_name, value) VALUES ("'.$uid.'", "'.$option_name.'", "'.$value.'")
    ON DUPLICATE KEY UPDATE  value = "'.$value.'"';
链接地址: http://www.djcxy.com/p/66757.html

上一篇: Simple ON DUPLICATE KEY UPDATE?

下一篇: Updating existing lines in MySql and treating Duplicated Keys