简单的重复密钥更新?
我试图在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
,但它似乎没有做任何事情。 基本上我想确保当我插入数据时,如果uid
和option_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)
上有UNIQIE
或PRIMARY 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