[英]Why does msyqli_real_escape_string() not escape multiple backslashes properly?
鑒於此SQL
UPDATE `mytable`
SET `mycolumn`='karla bailey-pearapppppppp\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
WHERE `id`=5619
為什么mysqli_real_escape_string()
無法正確轉義該字符串?
轉義列的值后嘗試使用此SQL查詢會產生以下mysqli錯誤:
“您的SQL語法有誤;請查看與您的MySQL服務器版本相對應的手冊,以在''karla bailey-pearapppppppppp \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\'在第3行“
可轉義的反斜線數目是否有限制?
您要轉義整個字符串嗎? 例如
$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';
好的,所以我發現了問題。 應用程序檢查值的長度>列的最大值,如果該值太大,則在完成轉義后將其截斷-從而破壞了轉義的值(在極少數情況下會發生此情況,此代碼已經存在多年了)。
因此,在轉義該值后,無法截斷以反斜杠結尾的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.