【问题标题】:PHP Delete rows from database if they no longer exist in the APIPHP 如果 API 中不再存在,则从数据库中删除行
【发布时间】:2021-11-28 15:39:55
【问题描述】:

我正在尝试创建类似的东西:

  • 当您向 API 发出 POST 请求时,将这些值插入到 MYSQL 数据库中
  • 如果它们不再存在于 API 中,则将其删除(因为 API 仅返回活动值)

插入有效,但删除效果不佳。

现在我认为它正在遍历请求并删除每个不匹配的每个 ID。所以它最终会在循环结束时删除所有内容。

我该如何解决这个问题?

<?php
include 'import.php'; // Import from API
include 'connect.php'; // Connect to DB


// Add and Update on duplicate
foreach ($query as $val) {
    $fruitId = $val['fruitId'];

    $sql = "INSERT INTO basket (fruitId) 
        VALUES ('$fruitId') 
        ON DUPLICATE KEY UPDATE 
        fruitId = '$fruitId'";


    if ($conn->query($sql) === TRUE) {
        echo "ID has been added";
    } else {
        echo "Error updating ID";
    }   
}

// Delete
foreach ($query as $val) {

    $fruitId = $val['fruitId'];

    $sql = "DELETE FROM basket 
            WHERE fruitId NOT IN ('$fruitId')";

    if ($conn->query($sql) === TRUE) {
        echo "ID has been deleted";
    } else {
        echo "Error updating ID";
    }   
}
?>

不确定是否有更好/更简洁的方法来实现这一点。

【问题讨论】:

    标签: php mysql api


    【解决方案1】:

    基于假数据库

    fruitId fruitName
    1       apple
    2       orange
    3       banana
    4       kiwi
    5       tomato
    

    看看这段代码

    $sql = "DELETE FROM basket 
                WHERE fruitId NOT IN (4,5)";
    

    这里发生了什么...删除除 id 4 和 5 之外的所有内容...因此删除了 1 到 3

    接下来是 id 3

    $sql = "DELETE FROM basket 
                WHERE fruitId NOT IN (3)";
    

    删除最后一个 id 4 和 5...其他查询将被忽略,不返回任何错误

    您需要换一种方式思考,但您需要确切知道应该删除哪些内容

    【讨论】:

      猜你喜欢
      • 2019-03-06
      • 2023-04-02
      • 2021-01-12
      • 1970-01-01
      • 2016-10-16
      • 2020-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多