Позволит ли это для mysql_real_escape_string работать глобально? - PullRequest
0 голосов
/ 03 октября 2011
$_POST = mysql_real_escape_string($_POST);

Выполняя это утверждение, теперь каждое значение сообщения экранируется через mysql_real_escape_string?

Ответы [ 4 ]

4 голосов
/ 03 октября 2011

Нет. Это не сработает вообще: $_POST - это массив: mysql_real_escape_string нужна строка в качестве первого аргумента. Однако вы можете достичь желаемого с помощью array_map:

$_POST = array_map('mysql_real_escape_string', $_POST);

Или array_walk_recursive, поскольку array_map не работает со значениями записей массива:

array_walk_recursive($_POST, function(&$v, $k) {$v = mysql_real_escape_string($v);});

Однако лучше было бы использовать параметризованные запросы: это, безусловно, самый безопасный способ избежать внедрения SQL. Вышеуказанная опция не только делает ненужное экранирование (например, элементы массива $_POST, которые не нужно вставлять в базу данных), но также усложняет использование данных в других контекстах, например каким-то образом вернуть их в браузер.

3 голосов
/ 03 октября 2011

Нет, но вы можете использовать array_walk() Документы или array_walk_recursive() Документы для достижения этой цели, так как mysql_real_escape_string() Документы требует ввода строки (иди рисунок ...), и вы передаете еемассив вместо.При этом вы передаете каждому элементу массива одну и ту же функцию обратного вызова:

array_walk_recursive($_POST, 'escape');

escape($k,$v)
{
 return mysql_real_escape_string($v);
}

Но лучше обрабатывать каждое значение соответственно , например.приведение INT к INT и т. д., или еще лучше, использовать параметризованные запросы .

0 голосов
/ 20 марта 2013

$ escapedPost = array_map (array ($ this, 'recursive_escape'), $ _POST);

/**
 * recursively escape an array containing strings and/or arrays
 */
function recursive_escape($value) {
    if (is_array($value)) {
        array_map(array($this, 'recursive_escape'), $value);
    } else {
        $value = mysql_real_escape_string($value);
    }
    return $value;
}
0 голосов
/ 03 октября 2011

Поскольку $ _POST является массивом, это приведет к ошибке.

ссылка: http://php.net/manual/en/function.mysql-real-escape-string.php

...