Как вставить новые данные, если user_id не существует в таблице mysql

У меня есть два столбца в таблице mysql map 1. Первый столбец имеет имя json, второй имеет имя user_id Теперь мне нужно вставить данные в новую строку, если user_id не существует в таблице mysql, но если существует, мне нужно просто обновить столбец json, где user_id = user_id ...

Я пытаюсь:

     try {        
                $STH = $db->prepare("INSERT INTO map (user_id, json)
VALUES (:2,:1)
on duplicate key update json=values(json)");


                $STH->bindParam(':1', $_POST['mapData']);
                $STH->bindParam(':2', $user_id);

Некоторые идеи? Я использую php pdo.

Как решить эту проблему?

Спасибо!


person johny mile    schedule 08.02.2015    source источник
comment
Итак, вы хотели бы вставить нового пользователя, верно?   -  person djv    schedule 09.02.2015
comment
не user, user_id... поэтому, если он существует, мне нужно просто обновить столбец json той строки, где user_id = user_id... Я храню user_id в каждой таблице, поэтому я знаю, какие данные...   -  person johny mile    schedule 09.02.2015
comment
Но если пользователь не существует, у вас нет идентификатора пользователя. Я думаю, это ваша проблема. Разве вы не захотите вставить нового пользователя и получить этот идентификатор?   -  person djv    schedule 09.02.2015
comment
Нет, я использую ajax, поэтому, когда пользователь хочет вставить в карту таблицу mysql, я проверяю, зарегистрированы ли пользователи, если да, то я сохраняю его идентификатор и его данные mapData из внешнего интерфейса...   -  person johny mile    schedule 09.02.2015


Ответы (2)


Вы пропустили : в on duplicate key update json=values(:json)");, поэтому попробуйте так:

     try {        
                $STH = $db->prepare("INSERT INTO map (user_id, json)
VALUES (:user_id,:json)
on duplicate key update json=values(:json)");
                $STH->bindParam(':json', $_POST['mapData']);
                $STH->bindParam(':user_id', $user_id);

Кроме того, ваш вопрос связан с: Здесь

person Joe Kdw    schedule 08.02.2015

Просто взгляните на команду MySQL REPLACE. Цитата из руководства MySQL:

REPLACE работает точно так же, как INSERT, за исключением того, что если старая строка в таблице имеет то же значение, что и новая строка для PRIMARY KEY или индекса UNIQUE, старая строка удаляется перед вставкой новой строки.

Это может быть решением вашей проблемы. В противном случае сделайте выбор, если идентификатор существует, сделайте обновление, иначе вставьте.

person Stefan P    schedule 08.02.2015