2012-05-07 3 views
1

У меня есть таблица с профилями. Если есть профиль для пользователя #: userId, я хочу ОБНОВИТЬ его. Если для этого пользователя нет профиля, я хочу ВСТАВИТЬ его. Я попробовал этот SQL запрос, но он не работает:SQL Query with ON DUPLICATE KEY UPDATE не работает

 
    INSERT INTO profiles 
    SET name = :name, 
     website = :website, 
     bio = :bio 
    WHERE user = :userId 
    ON DUPLICATE KEY UPDATE 
     name = :name, 
     website = :website, 
     bio = :bio 

«пользователь» является первичным ключом

EDIT: Я нашел ошибку в моем SQL, когда это выглядит так, он работает только штраф:

 
    INSERT INTO profiles 
    SET user = :userId, -- <-- mistake was here 
     name = :name, 
     website = :website, 
     bio = :bio 
    ON DUPLICATE KEY UPDATE 
     name = :name, 
     website = :website, 
     bio = :bio 

Спасибо, всем!

+1

Вы сказали ** пользователь ** является основным ключом, но это не в вашем запросе. – McGarnagle

ответ

2

Ваш синтаксис INSERT неверен (он выглядит как модифицированный оператор UPDATE). Попробуйте что-то вроде:

INSERT INTO profiles (name, website, bio) 
     VALUES (:name, :website, :bio) 
    ON DUPLICATE KEY UPDATE website = :website, bio = :bio; 

Смотрите documentation for INSERT ... ON DUPLICATE KEY UPDATE для получения дополнительной информации и примеров.

+0

Синтаксис INSERT INTO ... SET на самом деле правильный, и он работает (http://milov.nl/2836). Но когда я использую этот синтаксис с ON DUPLICATE KEY UPDATE, он становится неправильным. Это он «особенность» MySQL? – user1267570

+0

О, и мне нужно «привязать» профиль к идентификатору пользователя. – user1267570

+0

INSERT INTO ... SET не является стандартным SQL и должен быть расширением Mysql. –

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