gpt4 book ai didi

php - 试图删除数据库中与数组不匹配的所有行

转载 作者:行者123 更新时间:2023-11-29 02:13:32 24 4
gpt4 key购买 nike

我想弄清楚如何删除数据库中数组中不存在的所有 ID。我一直在尝试在我的查询中使用 NOT IN,但我不确定为什么它在脚本中运行时无法像我手动将其输入到 mysql 中时一样工作。这是一个例子。

mysqli_query($con, "DELETE FROM table WHERE id NOT IN ($array)");

$array 是来自 json api 的 id 列表。我使用 CURL 来获取 ID,我试图删除数据库中所有与 $array 中的 ID 不匹配的 ID。首先,我使用另一个简单的 CURL 脚本来抓取 api 并将找到的 ID 插入数据库,而我在这里要做的基本上是制作一个链接/数据检查器。如果在重新检查时在数组中找不到数据库中的 ID,那么我希望将它们删除。

我原以为上面的查询会完美无缺,但出于某种原因,它并没有。当从脚本运行查询时,mysql 日志显示正在运行的查询。

示例:

DELETE FROM table WHERE id NOT IN ('166')

或者当我测试多个值时。

DELETE FROM table WHERE id NOT IN ('166', '253', '3324')

发生的事情是它每次都会删除表中的每一行。我不太明白,因为如果我从日志中复制/粘贴相同的查询并自己手动运行它,它会完美无缺。

我一直在尝试各种捕获数组数据的方法,例如 array_column、array_map、array_search 和我发现的各种函数,但最终结果始终相同。现在,只是为了测试,我正在使用这 2 位代码来测试 2 个不同的 api,它给我提供与上面相同的 sql 查询日志输出。使用的函数只是我发现的几个随机函数。

//$result is the result from CURL using json_decode


function implode_r($g, $p) {
return is_array($p) ?
implode($g, array_map(__FUNCTION__, array_fill(0, count($p), $g), $p)) :
$p;
}

foreach ($result['data'] as $info){
$ids = implode_r(',', $info['id']);
mysqli_query($con, "DELETE FROM table WHERE id NOT IN ($ids)");
}

$arrayLength = count($result);
for($i = 0; $i < $arrayLength; $i++) {
mysqli_query($con, "DELETE FROM table WHERE id NOT IN ('".$result[$i]['id']."')");
}

如果有人知道发生了什么,我会很感激帮助或任何关于如何实现相同结果的建议。如果有帮助,我正在使用带有 innodb 表的 php 7 和 mysql 5.7。

最佳答案

它可能不起作用,因为你的 IN 值是这样的

IN('1,2,3,4');

当你想要的是这个

IN('1','2','3','4')

IN( 1,2,3,4)

要用 implode 得到这个包括这样的引号

 $in = "'".implode("','", $array)."'";

注意 每当将变量直接输入 SQL 时,都需要考虑安全隐患,例如 SQLInjection。如果 ID 来自固定来源,您可能没问题,但我还是喜欢对它们进行 sanitizer 。

关于php - 试图删除数据库中与数组不匹配的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45174687/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com