За последние 24 часа нас посетили 50954 программиста и 1744 робота. Сейчас ищут 1017 программистов ...

Как сделать On duplikate update ?

Тема в разделе "PHP для новичков", создана пользователем kiril901, 12 ноя 2017.

  1. kiril901

    kiril901 Активный пользователь

    С нами с:
    23 дек 2015
    Сообщения:
    124
    Симпатии:
    0
    Есть форма при заполнении и нажатии кнопки должна идти запись в БД а если она есть уже, то обновление, написал код:
    Код (Text):
    1. $insert_sql = "INSERT INTO main (nazv,text, user_id)". "VALUES ('{$nazv}','{$text}', '{$_SESSION['id']}')".
    2. "ON DUPLICATE KEY UPDATE  nazv = VALUES('{$nazv}'), text= VALUES ('{$text}'), user_id= VALUES ('{$_SESSION['id']}');
    3. ";
    4.  
    5. mysql_query($insert_sql);
    6.  
    7. {echo 'ок';}
    8. }
    он работает, только идет запись, а обновления нет, в чем ошибка?
     
  2. karmay

    karmay Активный пользователь

    С нами с:
    9 ноя 2017
    Сообщения:
    180
    Симпатии:
    18
    Адрес:
    Н.Новгород
    могу предположить, что поле, по которому идет сверка должен иметь атрибут в таблице либо
    UNIQUE, либо PRIMARY KEY, например название. и этих полей может быть несколько, для одной таблицы
     
    Maputo нравится это.
  3. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
  4. kiril901

    kiril901 Активный пользователь

    С нами с:
    23 дек 2015
    Сообщения:
    124
    Симпатии:
    0
    вы можете написать кодом
     
  5. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @kiril901, над синтаксисом не заморачивайтесь... Более менее норм - я перепутал. Выше Вам дали рекомендацию.
     
  6. kiril901

    kiril901 Активный пользователь

    С нами с:
    23 дек 2015
    Сообщения:
    124
    Симпатии:
    0
    id и так primary key напишите верно пожалуйста
     
  7. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @kiril901, дело не в id. Вы же не вносите вручную id в запросе. Одно из полей nazv, text, user_id должно иметь атрибут "уникальное".
     
  8. kiril901

    kiril901 Активный пользователь

    С нами с:
    23 дек 2015
    Сообщения:
    124
    Симпатии:
    0
    могу id поле сделать туда, просто напишите как надо
     
  9. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @kiril901, запрос у Вас вполне нормальный - надо структуру таблицы подкорректировать в базе данных.
     
  10. kiril901

    kiril901 Активный пользователь

    С нами с:
    23 дек 2015
    Сообщения:
    124
    Симпатии:
    0
    в бд поля id, user_id, nazv, text
     
  11. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @kiril901, по Вашему запросу непонятно, какой из этих атрибутов не должен дублироваться, потому как Вы их обновляете все. Какой-то атрибут (или составной ключ) должен остаться без изменения. Либо действительно надо добавить id.
     
  12. kiril901

    kiril901 Активный пользователь

    С нами с:
    23 дек 2015
    Сообщения:
    124
    Симпатии:
    0
    id у меня primary key, сейчас вообще ничего не обновляется
     
  13. karmay

    karmay Активный пользователь

    С нами с:
    9 ноя 2017
    Сообщения:
    180
    Симпатии:
    18
    Адрес:
    Н.Новгород
    В таблице наверно....
    поле id у Вас автоинкремент, правильно, автоматически ему присваивается атрибут приватного ключа.
    записи в таблицу идут по полям user_id, nazv и text. Откройте таблицу в phpMyAdmin или что там у Вас, выберите свою таблицу, нажмите на вкладку структура и добавьте полю nazv атрибут "уникальный"
    PHP:
    1. ALTER TABLE `main` ADD UNIQUE (
    2. `nazv`
    3. )
    Примерно вот такой запрос должен получиться
     
  14. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    По какому признаку Вы хотите определить, что запись уже есть, если все значения, что Вы пытаетесь внести потом обновляете:
     
  15. kiril901

    kiril901 Активный пользователь

    С нами с:
    23 дек 2015
    Сообщения:
    124
    Симпатии:
    0
    я хочу чтобы вы помогли, если надо к хостингу доступ дам
     
  16. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Чтобы кто-то смог помочь - надо определиться, что Вы считаете дублирующей записью?
    Например у Вас может для каждого пользователя быть только одна запись с определенным названием - тогда нужен составной уникальный ключ по (nazv и user_id) в таблице и в обновлении менять только атрибут text.
     
  17. kiril901

    kiril901 Активный пользователь

    С нами с:
    23 дек 2015
    Сообщения:
    124
    Симпатии:
    0
    у каждого пользователя одна запись в таблице
     
  18. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Тогда делайте атрибут user_id уникальным в структуре таблицы, а в запросе после UPDATE его уберите
     
  19. kiril901

    kiril901 Активный пользователь

    С нами с:
    23 дек 2015
    Сообщения:
    124
    Симпатии:
    0
    и будет ок?
     
  20. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @kiril901, должно быть "ок" )
     
  21. kiril901

    kiril901 Активный пользователь

    С нами с:
    23 дек 2015
    Сообщения:
    124
    Симпатии:
    0
    у меня id primary key идет, ну ок попробую
     
  22. kiril901

    kiril901 Активный пользователь

    С нами с:
    23 дек 2015
    Сообщения:
    124
    Симпатии:
    0
    пишет что все ок, но запись в таблицу уже не идет после выставлению ключем уникальным
    --- Добавлено ---
    пишет что все ок, но запись в таблицу уже не идет после выставлению ключем уникальным
     
  23. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Тут возникают два вопроса:
    1. Идет ли обновление полей?
    2. Что в логах базы данных?
     
  24. kiril901

    kiril901 Активный пользователь

    С нами с:
    23 дек 2015
    Сообщения:
    124
    Симпатии:
    0
    не то что обновление и записи нет в БД 4 поля, id первичный, user_id уникальный и те 2 поля обычных
     
  25. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Если запись не идет - значит на то есть причина. Эту причину можно увидеть в логах сервера.
    Какой веб-сервер используете?