PHP Имплод, но обернуть каждый элемент в кавычки
Предположим у меня есть массив:
$elements = array('foo', 'bar', 'tar', 'dar');
тогда я хочу построить DELETE IN
SQL запрос:
$SQL = "DELETE FROM elements
WHERE id IN ('" . implode(',', $elements) . "')";
проблема в том, что идентификаторы в массиве элементов не цитируются каждый по отдельности. То есть запрос выглядит так:
$SQL = "DELETE FROM elements
WHERE id IN ('foo,bar,tar,dar');
каков лучший, самый элегантный способ исправить это?
4 ответа:
добавить кавычки в
implode
call: (я предполагаю, что вы имели в виду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);
можно использовать
array_walk
чтобы перебрать все элементы в сторону массива, передающего ссылку на элемент и добавить кавычки следующим образом.<?php $arr = ['a','b','c']; array_walk($arr, function(&$x) {$x = "'$x'";}); echo implode(',', $arr); // 'a','b','c' ?>