【问题标题】:Insert record if user_id is unique in table, if not update column如果 user_id 在表中是唯一的,则插入记录,如果不是更新列
【发布时间】:2015-04-09 10:02:33
【问题描述】:

如果 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>";
    }

【问题讨论】:

  • 不确定json=values(json)是否正确,我会写成$STH = $db-&gt;prepare("INSERT INTO map (user_id, json) VALUES (:user_id,:json) on duplicate key update json=:json");

标签: php mysql pdo insert insert-update


【解决方案1】:

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

或者更好,通常 ids 是表的主键,这意味着您不必担心唯一性,主键始终是唯一的,数据库会为您检查它

【讨论】:

  • 请张贴表结构
  • @johnymile 不要在问题中发布图像、编写表格结构或包含图像本身(以便它出现)。虽然第一个选项要好得多。
猜你喜欢
  • 2021-03-29
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多