为什么msyqli_real_escape_string()不能正确地转义多个反斜杠?
鉴于这种SQL为什么msyqli_real_escape_string()不能正确地转义多个反斜杠?
UPDATE `mytable`
SET `mycolumn`='karla bailey-pearapppppppp\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
WHERE `id`=5619
为什么会mysqli_real_escape_string()
无法正常逃离这个字符串?
试图逃脱列的值之后,使用该SQL查询产生这种mysqli的错误:
“您的SQL语法错误;检查对应于您的MySQL服务器版本的使用权语法手册在'3号线附近'karla bailey-pearapppppppp \\\\\\''在线3“
是否有数量限制可以逃脱的反斜杠?
好的,所以我找到了问题。应用程序将检查值长度>列的最大值,如果值太大,则在完成转义后截断值 - 从而打破转义值(这是非常孤立的情况,这种情况会发生,此代码已存在多年)。
Ergo,在值已经转义后,不能截断以反斜杠结尾的值。
你是否逃避了ENTIRE字符串?例如
$sql = "UPDATE .... \\\\\\\'";
$escaped = mysqli_real_escape_string($link, $sql);
如果是这样,那是不正确的。你这样做是在捣毁字符串。你也将逃避'
,它划定你的where子句的值。只应执行转义VALUES,您将其插入到字符串中。例如
$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';
很好的纠正他们*希望*错字'msyqli_real_escape_string' –
不,我逃避的价值。现在处理一个示例脚本。 –
我很困惑。当我在应用程序之外尝试时,它不会失败。我可以在应用程序中完全重现,直到使用我创建的测试代码来创建连接,转义字符串,运行UPDATE查询。当我使用页面中的值(通过POST)时失败,但在测试脚本中使用相同的值时失败。该值使用rawurlencode()传递,所以在我的测试脚本中,我使用了编码值,然后使用rawurldecode(),但每次仍然有效。 –
为什么你仍然使用mysqli_real_escape_string(),而不是使用绑定变量....那么这将是一个非问题 –
在哪里以及如何实现msyqli_real_escape_string()?你的问题没有什么可以支持这一点。顺便说一句,它是'mysqli_real_escape_string()'而不是'msyqli_real_escape_string()'所以如果这就是你正在使用或不是;展示下。 –
看起来像是=和karla之间的错误 –