鉴于此SQL
UPDATE `mytable`
SET `mycolumn`='karla bailey-pearapppppppp\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
WHERE `id`=5619
为什么mysqli_real_escape_string()
无法正确转义此字符串?
在转义列的值后尝试使用此SQL查询会产生此mysqli错误:
"您的SQL语法出错了;查看与您的MySQL服务器版本相对应的手册,以便在'' karla bailey-pearapppppppp附近使用正确的语法。\\\\\\\\\\\\\\\\\\\\\ \\\\\\'在第3行"
可以转义的反斜杠数量是否有限制?
答案 0 :(得分:2)
你是否逃脱了整个字符串? e.g。
$sql = "UPDATE .... \\\\\\\'";
$escaped = mysqli_real_escape_string($link, $sql);
如果是这样,那是不正确的。你这样做是在破坏字符串。您还将转义用于分隔where子句值的'
。转义应仅执行您插入字符串的 VALUES 。 e.g。
$name = "Miles O'Brien"; // ' in name would cause syntax error
$bad_sql = "SELECT '$name'";
$broken_sql = mysqli_real_escape_string($link, $bad_sql);
// produces: SELECT \'Miles O\'Brien\'
$ok_sql = "SELECT '" . mysqli_real_escape_string($link, $name) . "'";
// produces: SELECT 'Miles O\'Brien';
答案 1 :(得分:1)
好的,所以我发现了问题。应用程序检查值长度>最大列,如果值太大,则在转义完成后截断值 - 从而打破转义值(非常孤立的情况,这将发生这种情况,此代码已存在多年)。
问题是,在值已经转义后,不能截断以反斜杠结尾的值。