Сначала попробуйте использовать PDO. С помощью подготовленных операторов переменные отправляются отдельно от запроса, и вам не нужно беспокоиться о том, чтобы вручную избежать параметров.
Во-вторых, если вам действительно нужно это сделать, используйте mysqli_real_escape_string
с картой массива. Нечто подобное должно работать
$escapedArray = array_map(function($val) use ($mysqli) {
return is_string($val) ? $mysqli->real_escape_string($val) : $val;
}, $unescapedArray);
Или процедурно как этот
$escapedArray = array_map(function($val) use ($mysqli) {
return is_string($val) ? mysqli_real_escape_string($mysqli, $val) : $val;
}, $unescapedArray);
Причина этого проста. Если какой-либо элемент массива не является строкой, побег будет возвращать null
, поэтому вы возвращаете элемент как есть.
EDIT: Для вложенных массивов, вы должны будете использовать array_walk_recursive
, вместо array_map
.
array_walk_recursive($varArray, function(&$val) use($mysqli) {
$val = !is_string($val) ?: mysqli_real_Escape_string($mysqli, $val);
});
Вы попали в ту же ловушку, что и я: ему нужно сгенерировать SQL для скрипта, который будет использовать кто-то другой. Увы, о ПДО не может быть и речи. – siride
Вот почему я также разместил альтернативу. :) – Achrome
golly gosh вы сделали! Любая причина не использовать прямую петлю foreach? – siride