2012-04-22 19 views
0

В моей таблице документов у меня есть: id (auto int index), user_id (P.key and links to other table), Doc_Name, abstractВставить ... на дубликат ключа update- повторно вставить

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

$the_query = sprintf("INSERT INTO `document` (`user_id`,`Doc_Name`,`abstract`) 
VALUES ('%d','%s','%s')",'$user_id', '$Doc_Name', '$abstract') 
ON DUPLICATE KEY UPDATE 
user_id=user_id+'$user_id', 
Doc_Name=Doc_Name+'$Doc_Name', 
abstract=abstract+'$abstract' " 
); 
+1

Можете ли вы показать выход 'SHOW CREATE TABLE Document' –

+0

полный код таблицы? – user1296762

ответ

0

Cargo cult programming? Использование sprintf() без каких-либо % заполнителей просто .... НЕПРАВИЛЬНО. Кроме того, почему добавление в обновленные поля?

MySQL использует concat() для конкатенации. + - это чисто математическая операция. Выполнение 'a' + 'a' не дает вам aa, вы получите 0.

+0

У меня действительно есть% заполнителей, но он не работал, но может поместить обратно. Edit – user1296762

0

user_id если это уникальное поле в таблице, ваш запрос должен выглядеть следующим образом:

$query = sprintf(" 
INSERT INTO 
    `document`(`user_id`, `Doc_Name`, `abstract`) 
VALUES 
    ('%s', '%s', '%s') 
ON DUPLICATE KEY UPDATE 
    `Doc_Name` = VALUES(`Doc_Name`), 
    `abstract` = VALUES(`abstract`) 
", $user_id, $Doc_Name, $abstract); 
+0

Если у меня будет сеанс, мне нужно будет добавить что-то вроде 'WHERE id = '$ _ SESSION [user_id]'', поскольку ничего не случилось с код выше – user1296762

+0

теперь я изменил запрос на the_query, он просто добавляет еще одну строку – user1296762

+0

ok, тогда вы должны добавить уникальное поле: 'ALTER TABLE document ADD UNIQUE (user_id)' –

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