簡體   English   中英

為什么msyqli_real_escape_string()無法正確轉義多個反斜杠?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM