将数字ID类型化为整数以防止SQL注入

时间:2013-03-25 16:42:13

标签: php mysql pdo sql-injection

我正在实施批量删除功能。该应用程序使用PDO,但我还没有想出一个很好的方法来为此使用预准备语句。

我有一系列要删除的行ID,任意长度:

array(3, 5, 8, [...])

使用预处理语句,我必须创建一串问号以用作占位符,然后绑定值,看起来像这样:

$question_marks = array();
foreach($ids) $question_marks[] = '?';
$question_marks = join(', ', $question_marks);

$statement = $pdo->prepare('DELETE FROM `table` WHERE `id` IN ('.$question_marks.')');

for($i = 0; $i < count($ids); $i++) {
    $statement->bindValue($i + 1, $ids[$i]);
}

$statement->execute();

我想到的是将ID转换为整数,以便删除任何SQL注入,这是我的问题:是吗?

$id_string = array();
foreach($ids as $id) $id_string[] = (int) $id;
$id_string = join(', ', $id_string);

$statement = $pdo->prepare('DELETE FROM `table` WHERE `id` IN ('.$id_string.')');

$statement->execute();

它仍然有点hacky,但在我看来比以前的解决方案好得多。

这样安全吗?有没有其他解决方案?

0 个答案:

没有答案