MySQL在哪里(数组)

时间:2014-01-05 22:20:24

标签: php mysql pdo sql-in

function delete_group($db) {
    $ids = Parameters::get('ids');
    $ids = implode(',', $ids); // now a string like '5,6,7'.
    add_to_log($ids);
    try {
        $stmt = $db->prepare("DELETE FROM mytable WHERE id IN (:ids)");
        $stmt->bindParam(':ids', $ids, PDO::PARAM_STR);
        $stmt->execute();
        response('success', 'success', NULL);
    }
    catch (PDOException $e) {
        response('error', 'Delete group failed.', NULL);
    }
}

此代码不起作用:仅删除第一行。但是如果我做的话

$stmt = $db->prepare("DELETE FROM mytable WHERE id IN ($ids)");
相反(只是插入字符串),虽然代码具有SQL注入安全性问题,但它仍然有效。如何使其工作并保持安全?

1 个答案:

答案 0 :(得分:3)

$ids = Parameters::get('ids');
$ids = array_map('intval', $ids);
$ids = implode(',', $ids);

现在您不必担心注射。