1

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

所以假设event_id=5有 4 行(1,2,3,4),我的数组有(1,2)我想删除3,4事件 id 等于的位置5

要做到这一点: - >从一个数组中选择 ID 并将 ID 放入另一个数组(似乎工作)

->删除除选择查询附带的行之外的所有行(失败删除表的所有行)。

$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);原因('Array', 'Array', 'Array', 'Array', 'Array')不是我想要的,应该是这样的('89','90', '91', '92', '93')

我怎样才能使这项工作?

4

2 回答 2

7

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

 DELETE FROM FILES WHERE event_id=$event_id AND name NOT IN ('$names')
于 2013-05-14T17:18:11.603 回答
0

代替

$rows[]=$row;

$rows[]=$row['file_id'];

顺便提一句。永远不要在不转义的情况下将变量传递给查询。检查即 AdoDB 库

于 2013-05-14T17:18:09.797 回答