2013-03-01 5 views
0

Там мой код:дублирования UPDATE - Не работает

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

Когда выполнение этого запроса в базе данных создает новую строку, несмотря на то, что уже существует ...

Спасибо за помощь ,

+4

Каков ключ на вашем столе? –

+0

Каков ваш основной/уникальный ключ – datasage

+0

На столе нет ключей. –

ответ

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

Что вы изменили? –

+0

количество' '' amount \ '' и I я уверен, что вы изменили запрос после того, как вы разместили ... – 2013-03-01 20:32:23

+0

Если '$ amount' является int, тогда кавычки не имеют значения. Кроме того, обратные ссылки вокруг' amount' тоже здесь не имеют значения. –

2

Я хотел бы сделать это так:

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

Пока он добавляет «УНИКАЛЬНЫЙ КЛЮЧ» в таблицу :) –

+0

Почему это? Я что-то упустил? Кажется, он знает, что должен быть примар y или уникальный ключ;) –

+0

В комментариях к вопросу он говорит: «Нет таблицы на таблице». Это проблема. Без ключа база данных не будет знать, что такое 'DUPLICATE KEY'. Один из них добавил ключ, я предполагаю, что его запрос будет работать. –

Смежные вопросы