3

一括削除機能を実装しています。アプリケーションは 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();

まだ少しハックですが、私の意見では、以前のソリューションよりもはるかに優れています。

これは安全ですか?代替ソリューションはありますか?

4

0 に答える 0