【发布时间】:2013-09-18 11:24:40
【问题描述】:
我有一个表单,可以将一组交易 ID 提交给$_POST['transid'],以便可以删除这些交易记录。
我通常使用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")'
这似乎是自找麻烦。我如何保护自己免受灾难(恶意或其他)?有没有一种有效的方法来清理阵列?还是我应该换一种方式?
任何想法或指导将不胜感激。
【问题讨论】:
-
循环遍历帖子 trnsid 并检查是否全部为 int
-
使用 PDO 和准备好的语句。
-
@Mihai:使用具有可变数量值的准备好的语句有点棘手。此外,MySQLi 还支持预处理语句。
-
@RocketHazmat 一个不排除另一个..但我很好奇,你会如何为准备好的语句使用可变数量的参数?
-
@Mihai:这是你的建议。无论如何,您必须计算元素的数量并添加那么多
?s,然后可能使用call_user_func_array()来调用bind_param函数。