Php 如果用户id在表中是唯一的,则插入记录;如果不是更新列,则插入记录

Php 如果用户id在表中是唯一的,则插入记录;如果不是更新列,则插入记录,php,mysql,pdo,insert,insert-update,Php,Mysql,Pdo,Insert,Insert Update,如果user\u id在表map中是唯一的,我需要插入记录,但如果不是,则用数据更新user\u id=:user\u id所在的行 我尝试的是: try { $result = $db->prepare('SELECT user_id FROM map WHERE user_id=:user_id'); $result->bindParam(':user_id', $user_id); $result->execute();

如果user\u id在表
map
中是唯一的,我需要插入记录,但如果不是,则用数据更新user\u id=:user\u 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>";

        }
试试看{
$result=$db->prepare('SELECT user_id FROM map WHERE user_id=:user_id');
$result->bindParam(':user\u id',$user\u id);
$result->execute();
//echo$jsonTable;
}捕获(PDO$e){
回显“错误:”。$e->getMessage();
}
试试{
如果($result==null){
$STH=$db->prepare(“插入映射(json,用户id)值(:json,:用户id)”);
$STH->bindParam(':json',$\u POST['mapData']);
$STH->bindParam(':user\u id',$user\u id);
$STH->execute();
}否则{
$STH=$db->prepare(“更新映射集json=:json其中user\u id=:user\u id”);
$STH->bindParam(':json',$\u POST['mapData']);
$STH->bindParam(':user\u id',$user\u id);
$STH->execute();
}
}捕获(PDO$e){
echo$e->getMessage();
}
echo“数据提交成功”

”; }
所以这里我试着检查我需要将exist添加到表中的用户id,若并没有用户id,那个么若准备好的用户id是新的,那个么我试着插入数据,但若用户id已经将exist添加到表中,那个么更新那个条记录

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

我要开始讲php了,很抱歉这个琐碎的问题。。。谢谢

更新: 我也尝试插入,但如果用户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>";
    }
试试{
$STH=$db->prepare(“插入到映射(user\u id,json)值中(:user\u id,:json)
在重复键上更新json=values(json)”;
$STH->bindParam(':json',$\u POST['mapData']);
$STH->bindParam(':user\u id',$user\u id);
$STH->execute();
}捕获(PDO$e){
echo$e->getMessage();
}
echo“数据提交成功”

”; }
要检查唯一性,您可以使用唯一键让db检查唯一性:


或者更好,通常ID是表的主键,这意味着您不需要担心唯一性,主键总是唯一的,db会为您检查它

请发布表structure@johnymile不要张贴图片,写表格结构或在问题中包含图片本身(使其出现)。虽然第一个选项要好得多。我不确定
json=values(json)
是否正确,但我编写的代码就像
$STH=$db->prepare(“在重复键更新json=:json时插入映射(user_id,json)值(:user_id,:json”)