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-инъекций. Как заставить его работать и обезопасить?
WHERE IN
для подготовленных операторов. Вам придется проделать дополнительную работу, чтобы настроить его (либо создать параметры X?
в зависимости от размера массива, либо выполнитьimplode()
для массива). - person Sam   schedule 06.01.2014