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
И все с разными символами.

Другие вопросы по тегам