1

イベントIDが何らかの値(一意のキー)と等しく、IDが配列にないテーブルのすべての行を削除しようとしています。

したがって、 event_id=54行が(1,2,3,4)あり、配列にイベントIDが等しい場所(1,2)を削除したいとしましょう。3,45

->配列から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]; (取得方法によって異なります)。ただし、これはより実行可能です。

 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 に答える