我有一个表单,它向$_POST['transid']提交一个事务id数组,以便可以删除这些事务记录。
我通常使用mysqli_real_escape_string来帮助防止攻击,但我不确定如何使用数组来实现它。以下是我的问题:

$query = 'DELETE FROM TRANSACTIONS WHERE (transid) IN ("'.implode('","',$_POST[transid]).'")'

……给了我这样的感觉:
$query = 'DELETE FROM TRANSACTIONS WHERE (transid) IN ("123","124","138","145")'

这似乎是自找麻烦。我如何才能保护自己免受灾难(恶意或其他)?有没有一种有效的方法来清理数组?或者我应该换个方式?
任何想法或指导将不胜感激。

最佳答案

在使用$post进行内爆之前,最好对其进行消毒,为此,必须遍历它。@用户870018击败了我对结构的打击,但我还是会这样做:

function sanitize($n)
{
    return your_escape_function_here($n);
}

$values = implode(",", array_map("sanitize", $_POST[transid]));
$query = 'DELETE FROM TRANSACTIONS WHERE (transid) IN ('.$values.')';

10-08 01:57