Предположим, у меня есть массив:
$elements = array('foo', 'bar', 'tar', 'dar');
Затем я хочу создать запрос DELETE IN
SQL:
$SQL = "DELETE FROM elements WHERE id IN ('" . implode(',', $elements) . "')";
Проблема в том, что идентификаторы в массиве элементов не котируются отдельно. IE выглядит так:
$SQL = "DELETE FROM elements WHERE id IN ('foo,bar,tar,dar');
Какой лучший, самый изящный способ исправить это?
Добавьте кавычки в вызов implode
: (Я предполагаю, что вы имели в виду implode
)
$SQL = 'DELETE FROM elements WHERE id IN ("' . implode('", "', $elements) . '")';
Это дает:
DELETE FROM elements WHERE id IN ("foo", "bar", "tar", "dar")
Лучший способ предотвратить внедрение SQL – это убедиться, что ваши элементы правильно экранированы.
Легкая вещь для этого должна работать (но я ее не тестировал) – использовать либо array_map
либо array_walk
, и избегать каждого параметра, например:
$elements = array(); $elements = array_map( 'mysql_real_escape_string', $elements);