【问题标题】:Check if Record Exists检查记录是否存在
【发布时间】:2011-02-20 09:23:38
【问题描述】:

我找到this on php.net 来检查文件是否存在。

我想先检查记录是否存在,然后进行更新,否则进行插入。

if(record exist) {
   update query}
else 
  { insert query}

我知道如何更新或插入,但不知道如何先检查记录是否存在。是怎么做到的?

【问题讨论】:

  • 你是指什么样的记录?

标签: php


【解决方案1】:

我遇到了同样的问题,我使用 REPLACE INTO 解决了这个问题,这是一个这样工作的 MySQL 扩展:

  • 如果要插入的记录不存在,MySQL REPLACE 插入一条新记录。
  • 如果要插入的记录 已经存在,MySQL REPLACE 先删除旧记录,然后插入新记录

当我不需要记住记录的旧值时,我发现此方法很有用。 例如,如果你想增加一个值,这个方法不是一个好方法,因为会删除旧记录和旧值。

请记住,您需要同时拥有 INSERT 和 DELETE 权限才能使用 REPLACE。

这是基于我的代码的示例:

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "REPLACE INTO table_name (name, age, current_date)
       VALUES ('" . $name . "', $age, '" . date('Y-m-d') . "')";

if ($conn->query($sql) === FALSE) {
   echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();

【讨论】:

    【解决方案2】:
    $username = $_POST["user"];
    
    $query = mysql_query("SELECT * FROM users WHERE username='$username'");
    
    if(mysql_num_rows($query) != 0)
    {
    echo "Username already exists";
    }
    else
    {
    //proceed with code here
    }
    

    【讨论】:

      【解决方案3】:

      奇怪没有人提到使用 REPLACE?

      【讨论】:

        【解决方案4】:

        我会推荐 Dominic Rodger 的解决方案,但需要稍作改动以使其更快。 您应该选择一个值且不超过一行。

        $result = mysql_query("SELECT key FROM table1 WHERE something LIMIT 1"); $num_rows = mysql_num_rows($result); 如果 ($num_rows > 0) { // 做一点事 } 别的 { // 做其他事情 }

        如果您的记录已经存在,您将获得一个结果,该结果超过 0 个,因此它可以工作,但可能来自您的 SQL-Server 的流量较少。

        【讨论】:

          【解决方案5】:

          您可以将数据库中的特定列设置为主键,然后仅当您还没有记录时插入才会成功。 这样,您就不需要检查记录是否存在。

          【讨论】:

            【解决方案6】:

            您不需要在 PHP 中执行此操作,您可以直接在数据库的 SQL 查询中执行此操作(我假设您正在使用数据库来记录记录,因为这听起来像您的问题,并且我会假设 MySQL,因为它经常与 PHP 一起使用)。

            INSERT INTO ... ON DUPLICATE KEY UPDATE;
            

            如果新行不存在,则插入新行,如果存在则更新当前行,假设您的表具有主键。

            有关更多信息,请参阅MySQL Manual

            另一种选择是先执行SELECT COUNT(1) FROM myTable WHERE ... 查询,然后仅在结果为 0 时执行插入,否则执行更新。

            【讨论】:

            • 在我发现重复密钥更新的那一天,我的生活变得轻松多了。
            【解决方案7】:

            你也可以试试this

            INSERT ... ON DUPLICATE KEY UPDATE
            

            【讨论】:

              【解决方案8】:

              如果您知道如何执行 SQL SELECT,请执行此操作:

              $result = mysql_query("SELECT * FROM table1 WHERE something");
              $num_rows = mysql_num_rows($result);
              
              if ($num_rows > 0) {
                // do something
              }
              else {
                // do something else
              }
              

              更好的是,不要在 PHP 中这样做,使用 INSERT ... ON DUPLICATE KEY UPDATE

              【讨论】:

                【解决方案9】:

                您可以对该记录进行选择并检查结果,或者您可以尝试更新并查看是否有错误。如果有,那么就没有什么可更新的了,所以插入一个。

                【讨论】:

                  【解决方案10】:

                  计算符合您条件的记录?

                  select count(*) from foo where id = 5
                  
                  if($count > 0) {
                      // record exists
                      ...
                  }
                  

                  【讨论】:

                    猜你喜欢
                    • 2015-01-21
                    • 2012-08-13
                    • 2015-01-02
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多