php - Delete NOT IN array 删除所有行,PHP Mysql

标签 php mysql

我正在尝试完成删除表中事件 ID 等于某个值(唯一键)且 ID 不在我的数组中的所有行;

假设 event_id=5 有 4 行(1,2,3,4) 而我的数组有 (1,2) 我想删除事件 ID 等于 53,4

为此: ->从数组中选择 ID 并将 id 放入另一个数组(似乎有效)

->删除除select查询自带的行以外的所有行(失败则删除表的所有行)。

$query = "SELECT file_id FROM FILES WHERE event_id=$event_id AND name IN ('$names')";
    $result = $sql->query($query); 
    //printf("$query: %s\n", $query);
    var_dump($query);    
    //printf("\n");
    if (!$result) {
        var_dump($result);
        printf("Query failed: %s\n", $mysqli->error);
        sendResponse(417, json_encode("Query failed"));

    exit;
    }
    //printf("\n");
    $rows = array();
    while($row = $result->fetch_row()) {
                $rows[]=$row;
                printf("\n");
    }

    $result->close();
    var_dump($rows);
    printf("\n");

    $delete = join("', '",$rows);
    var_dump($delete);
    printf("\n");

    //send delete request here
    $query ="DELETE FROM FILES WHERE event_id=$event_id AND file_id NOT IN ('$delete')";
    $result = $sql->query($query);
    //printf("$query: %s\n", $query);
    var_dump($query);
    printf("\n");     
    if (!$result) {
        var_dump($result);
        printf("\n");
        printf("Query failed: %s\n", $mysqli->error);
        sendResponse(417, json_encode("Query failed"));

    exit;
    }

日志:

string(143) "SELECT file_id FROM FILES WHERE event_id=7 AND name IN ('sample-1.pdf', '2012-lve-vegas-faq.pdf', 'sample-2.pdf', 'sample-3.pdf', 'sample.pdf')" array(5) { [0]=> array(1) { [0]=> string(2) "89" } [1]=> array(1) { [0]=> string(2) "90" } [2]=> array(1) { [0]=> string(2) "91" } [3]=> array(1) { [0]=> string(2) "92" } [4]=> array(1) { [0]=> string(2) "93" } } string(41) "Array', 'Array', 'Array', 'Array', 'Array" string(99) "DELETE FROM FILES WHERE event_id=7 AND file_id NOT IN ('Array', 'Array', 'Array', 'Array', 'Array')"

在日志中可以看到$delete = join("', '",$rows); causes ('Array', 'Array', 'Array', 'Array ', 'Array') 不是我想要的,应该是 ('89','90', '91', '92', '93')

我怎样才能让它工作?

最佳答案

大概应该是$rows[]=$row['file_id'];或 $rows[]=$row[0]; (取决于获取方法)。但是,这会更可行:

 DELETE FROM FILES WHERE event_id=$event_id AND name NOT IN ('$names')

关于php - Delete NOT IN array 删除所有行,PHP Mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16549046/

相关文章:

php - 如何将 eval() 与命名空间代码一起使用?

php - 为什么 'float' 属性在 IE7 上不起作用?

mysql - Oracle MySQL : Cannot add foreign key constraint

php - Docker Alpine镜像未找到php7.1-xsl

php - 将 JavaScript 变量作为隐藏输入传递给 PHP

php - 面向 PHP 开发人员的 android 编程书籍或/和教程

基于 SELECT 的 MySQL 条件语法

php - Laravel 5.2 将用户 IP 地址保存到数据库

java - MySQL Java根据两个字符串列删除行

php - 是否有任何可用于 php 的小型 cms