Не так давно заметил, что метод mysqli::real_escape_string работает некорректно. А именно, он вносит неэкранированную строку в базу данных.
К примеру, есть код:
$db = new mysqli('localhost', 'root', '', 'db');
$db->set_charset("utf8");
$val1 = $db->real_escape_string('"str"ing1""');
$val2 = $db->real_escape_string('string"2"v');
$query = $db->query("INSERT INTO `test` VALUES ('','$val1', '$val2', '1765')");
echo $val1 . "<br>";
echo $val2;
После его выполнения, как и следует ожидать на экран выводиться 2 экраннированных строки: \"str\"ing1\"\" и
string\"2\"v. Но в базу данных вносятся исходные данные: "str"ing1"" и string"2"v.
Что делать? Или, может быть, я чего-то не понимаю?
Версия php: 5.4