Вообще говоря, если вы хотите добавить строку в ваш SQL-запрос, вы должны сразу же закрыть ее перед добавлением в ваш SQL-запрос.
Я предполагаю, что вы хотите экранировать все свои данные в начале вашего PHP-скрипта, чтобы вам не пришлось беспокоиться о экранировании.
Экранирующая строка для запросов SQL не должна быть включена, потому что это плохой метод проектирования:
- Что происходит, когда вы добавляете экранированную строку в элемент ввода HTML-формы?
Исходная строка клиента будет изменена.
- Это неудобный или проблемный способ использования подготовленных операторов с уже экранированными данными.
Я думаю, что следует использовать следующий код:
function init_filter_input($method_array /* $_GET, $_POST, or whatever you wish */ )
{
filter_UTF8($method_array); // for a UTF8 encoded string
filter_HTML($method_array);
}
function filter_UTF8($mixed)
{
return is_array($mixed)
? array_map('filter_UTF8',$mixed)
: iconv('UTF-8','UTF-8//IGNORE',$mixed);
}
function filter_HTML($mixed)
{
return is_array($mixed)
? array_map('filter_HTML',$mixed)
: htmlspecialchars(trim($value),ENT_QUOTES);
}
Если вы хотите добавить строку в ваш запрос SQL, вы можете решить использовать подготовленные операторы или sprintf:
// sprintf example:
query('SELECT ... WHERE username="%s"', $unescaped_username);
function query($query_str, $params)
{
if (is_array($params))
{
$params = array_map('filter_SQL', $params);
$query_str = vsprintf($queryStr, $params);
}
else
$query_str = sprintf($query_str ,filter_SQL($params));
mysql_query($query_str);
}