Вставить запись, если идентификатор пользователя уникален в таблице, если не обновить столбец


Мне нужно вставить запись, если user_id уникален в таблице map, но если нет, то обновите эту строку, где user_id=: user_id с данными...

Что я пытаюсь:

  try {

      $result = $db->prepare('SELECT user_id FROM map WHERE user_id=:user_id');
      $result->bindParam(':user_id', $user_id); 
      $result->execute();

    //echo $jsonTable;
    } catch(PDOException $e) {
        echo 'ERROR: ' . $e->getMessage();
    }
           try {   
               if ($result==null) {
               $STH = $db->prepare("INSERT INTO map (json, user_id) VALUES (:json, :user_id)");

                $STH->bindParam(':json', $_POST['mapData']);
                $STH->bindParam(':user_id', $user_id);
                $STH->execute();
               } else {
                $STH = $db->prepare("UPDATE map SET json = :json WHERE user_id= :user_id");

                $STH->bindParam(':json', $_POST['mapData']);
                $STH->bindParam(':user_id', $user_id);
                $STH->execute(); 
               }
            } catch (PDOException $e) {
                echo $e->getMessage();
            }
            echo "<p>Data submitted successfully</p>";

        }

Так вот я пытаюсь проверить, является функция user_id мне нужно добавить существует в таблице, и если нет ид_пользователя, так что если готовы user_id-это новый затем я пытаюсь вставить данные, а если уже спроста функция user_id в таблице, чтобы обновить эту запись...

Но это не работает для меня, также не дает мне никакой ошибки?

I'beginer на php, так что извините за банальный вопрос... Спасибо!

Обновление: Я также пытаюсь вставить, но если user_id дублируется, то обновить:

        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);

                $STH->execute();

            } catch (PDOException $e) {
                echo $e->getMessage();
            }
            echo "<p>Data submitted successfully</p>";
    }
1 2

1 ответ:

Для проверки уникальности можно использовать уникальный ключ для проверки уникальности БД: http://dev.mysql.com/doc/refman/5.6/en/mysql-indexes.html

Или лучше, обычно идентификаторы являются первичными ключами таблицы, это означает, что вам не нужно беспокоиться об уникальности, первичный ключ всегда уникален, и БД проверяет его для вас