mysql_real_escape_string и array_map возвращают пустые строки?
Я еще не научился использовать параметризованные запросы (что, согласно некоторым другим публикациям на этом сайте, то, что мне абсолютно необходимо сделать первым делом завтра утром), и я хочу получить в форму запрос данных формы, избежав этого.
Дважды я сталкивался с этим решением:
$_POST = array_map('mysqli_real_escape_string', $_POST);
Это, насколько я могу судить, запускает все переменные в массиве $_POST через функцию escape. Я видел, что именно эта строка проголосовала, но когда я добавляю ее в свой существующий PHP, она создает кучу пустых значений.
У меня сложилось впечатление, что mysqli_real_escape_string нужен 2-й параметр - ссылка / соединение. Это то, что вызывает мою проблему? Данные очень хорошо переносятся в базу данных, если эта строка удалена, а мои переменные получают свои неэкранированные значения из $_POST.
3 ответа
array_map
возвращает новый массив, если вы перезаписываете $_POST
лучшее решение будет использовать array_walk
,
array_walk($_POST, function(&$string) use ($link) {
$string = mysqli_real_escape_string($link, $string);
});
Обратите внимание, что $link
должно быть действительное соединение.
Function [ <internal:mysqli> function mysqli_real_escape_string ] {
- Parameters [2] {
Parameter #0 [ <required> $link ]
Parameter #1 [ <required> $string_to_escape ]
}
}
Вы должны передать экранированные значения в другую переменную:
$post = array_map('mysqli_real_escape_string', $_POST);
Или же:
foreach($_POST as $k => $v) {
$_POST[$k] = mysqli_real_escape_string($v);
}
Примечание. Если ссылка на массив не указана, foreach работает с копией указанного массива, а не с самим массивом.
Тогда да, это ваш ответ:
mysql_real_escape_string()
требует подключения к базе данных, так как она использует набор символов базы данных, чтобы определить, что необходимо экранировать.
Без этого PHP не знает, какой набор символов вы используете и что скрывать.
Здесь очень много:
http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html
И все с разными символами.