ON DUPLICATE KEY UPDATE即使添加了主键,仍会添加重复项

时间:2012-11-01 15:32:43

标签: php mysql sql-update

我试图编写一个函数来更新mysql表,如果它被激活,或者创建它,如果它没有。

我的脚本仍然会创建一个新条目而不是更新。

这是我的sql结构:

CREATE TABLE IF NOT EXISTS `loan` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `bank_id` int(11) DEFAULT NULL,
  `name` longtext COLLATE utf8_unicode_ci,
  `rate` decimal(8,3) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `loan_0b0af02d` (`bank_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

这是我的php脚本:

$item_insert_sql = "INSERT INTO loan(id, bank_id, name, rate) VALUES ('" . $id . "', '" . $bank_id . "', '" . $name . "', '" . $rate . "'), primary key (id), ON DUPLICATE KEY UPDATE (name='$name', rate='$rate')";
$insert_item = mysql_query($item_insert_sql, $db); 

我需要做些什么来解决这个问题?

2 个答案:

答案 0 :(得分:2)

您的插入语句不正确。您无法在插入中定义主键,并且您的on duplicate语法也很糟糕:

INSERT INTO table (... fields ...) VALUES (... values ...)
ON DUPLICATE KEY SET field1=value1, field2=value2, etc...

如果你在query()调用上有最小的错误处理,你就会收到错误消息:

$insert_item = mysql_query($item_insert_sql, $db) or die(mysql_error());
                                                 ^^^^^^^^^^^^^^^^^^^^^^

答案 1 :(得分:1)

您可以尝试以下查询:

$item_insert_sql = "INSERT INTO loan(id, bank_id, name, rate) VALUES ('" . $id . "', '" . $bank_id . "', '" . $name . "', '" . $rate . "') ON DUPLICATE KEY UPDATE name='$name', rate='$rate';