如果user_id在表中是唯一的,则插入记录,如果不是更新列


Insert record if user_id is unique in table, if not update column

如果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是新的,那么我试着插入数据,但如果user_id已经在表中删除,那么更新该记录。。。

但是这对我不起作用,也不会给我任何错误吗?

我开始学习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>";
    }

要检查唯一性,可以使用唯一键让数据库检查唯一性:http://dev.mysql.com/doc/refman/5.6/en/mysql-indexes.html

或者更好的是,通常id是表的主键,这意味着你不需要担心唯一性,主键总是唯一的,数据库会为你检查