Подтвердить что ты не робот

PHP Implode But Wrap Каждый элемент в цитатах

Предположим, у меня есть массив:

 $elements = array('foo', 'bar', 'tar', 'dar');

Затем я хочу создать запрос DELETE IN SQL:

 $SQL = "DELETE FROM elements
               WHERE id IN ('" . implode(',', $elements) . "')";

Проблема заключается в том, что идентификаторы в массиве элементов не котируются отдельно. I.E запрос выглядит так:

 $SQL = "DELETE FROM elements
               WHERE id IN ('foo,bar,tar,dar');

Какой лучший, самый изящный способ исправить это?

4b9b3361

Ответ 1

Добавьте кавычки в вызов 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);