Я не эксперт по PHP / SQL, и я обнаружил, что мне пришлось применить mysql_real_escape_string для защиты моих SQL INSERTS.
Я сделал функцию, используя несколько советов, найденных в сети, вот она:
function secure($string)
{
if(is_numeric($string))
{ $string = intval($string); }
elseif (is_array($string))
{
foreach ($string as $key => $value) {
$string[$key] = secure($value);
}
}
else if ($string === null)
{
$string = 'NULL';
}
elseif (is_bool($string))
{
$string = $string ? 1 : 0;
}
else
{
if (get_magic_quotes_gpc()) { $value = stripslashes($string); }
$string = mysql_real_escape_string($string);
$string = addcslashes($string, '%_');
}
return $string;
}
Дело в том, что когда я смотрю на содержимое таблиц, оно содержит обратную косую черту.
И затем, по логике вещей, когда я получаю данные, мне нужно применить полоску к ним, чтобы убрать эту обратную косую черту.
Магические кавычки отключены.
ВОПРОС 1)
Теперь я думаю, что хотя я использую mysql_real_escape_string для защиты своих данных перед вставкой SQL, обратные косые черты не должны появляться в моем контенте? Вы можете это подтвердить?
ВОПРОС 2)
Если это не нормально, почему эти обратные косые черты появляются в моем контенте и поиске phpMyAdmin? Что я сделал не так?
ВОПРОС 3)
У меня есть предположение, что mysql_real_escape_string может применяться дважды, не так ли?
Если так, что может быть функцией, предотвращающей многократное применение mysql_real_escape_string к одной и той же строке, что приводит к множеству \\ к одному и тому же экранируемому символу?
Большое спасибо заранее за ваши отзывы, ребята!