2013-03-01 46 views
0

还有就是我的代码:尽管它已经存在对重复UPDATE - 不工作

$sql = "INSERT INTO item SET 
    player = '$player', 
    amount = '$amount', 
    item = '$item', 
    allowed = '$allowed' ON DUPLICATE KEY UPDATE 
    amount = amount + $amount"; 

当我执行此查询,在数据库中创建新的行...

感谢您的帮助。

+4

桌子上的钥匙是什么? – 2013-03-01 20:24:55

+0

你的主要/唯一密钥是什么 – datasage 2013-03-01 20:25:54

+0

桌子上没有钥匙。 – 2013-03-01 20:26:32

回答

2

在评论,你说在桌子上没有钥匙。这是一个问题。你问数据库ON DUPLICATE KEY UPDATE,但没有UNIQUE KEY,它不知道什么是DUPLICATE KEY

您需要在不希望复制的字段上添加UNIQUE KEY(或PRIMARY KEY)。

2

的语法不正确,更正版本:

$sql = "INSERT INTO item SET 
    player = '$player', 
    amount = '$amount', 
    item = '$item', 
    allowed = '$allowed' 
    ON DUPLICATE KEY UPDATE 
    amount = `amount` + '$amount' "; 

其他因素取决于你的表结构和关键

+0

你改变了什么? – 2013-03-01 20:31:14

+0

等于'\'金额\'和I你确定你在发布后改变了查询... – 2013-03-01 20:32:23

+0

如果'$ amount'是一个int,那么引号并不重要,同样,'amount'里的反引号在这里也没有什么关系 – 2013-03-01 20:33:09

2

我会做这样的:

$sql = "INSERT INTO DBNAME.item (player, amount, item, allowed) 
     values('$player', '$amount', '$item', '$allowed') 
     ON DUPLICATE KEY UPDATE 
     amount = amount + values(amount);"; 
+2

只要他在表格中添加一个'UNIQUE KEY' :) – 2013-03-01 20:34:26

+0

这是为什么?我错过了什么吗?我相信他知道必须有主人y或唯一的密钥;) – 2013-03-01 20:35:30

+0

在对这个问题的评论中,他说'在桌子上没有[sic]键.'。这是这个问题。没有密钥,数据库将不知道“DUPLICATE KEY”是什么。一个他添加了一个密钥,我假设他的查询会起作用。 – 2013-03-01 20:37:11