SQL 字符转义错误,尽管已经使用了 gsub 函数

我正在使用一个常见的函数来 GSUB 特殊字符并替换为转义字符,但是我仍然得到一个 SQL 错误,几乎好像什么都没有做。当查看给定的查询时,我注意到两个反斜杠。以下是我正在使用的函数:

function escape_sqli(source)
    local replacements = { ['"'] = '\\"', ["'"] = "\\'" }
    return source:gsub( "['\"]", replacements ) -- 或者使用 string.gsub( source, "['\"]", replacements )
end

这是我正在输入的数据: You're

这是 GSUB 之后查询的一部分:" message ":"you\\'re",

这是错误:ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 're","type":"message"

点赞
用户6632736
用户6632736

如果你连接到 MariaDB 服务器使用 ANSI_QUOTES 模式,双引号用于引用标识符,而不是字符串。

如果连接是在 NO_BACKSLASH_ESCAPES 模式下,反斜杠被视为普通字符。

查询 @@GLOBAL.sql_mode@@SESSION.sql_mode 将显示模式。

此外,在 mySQL 中,你不需要转义双引号,也不需要将单引号转义成双引号。因此,如果你预先知道要如何引用传递给 mySQL 的字符串,那么你只需要转义一种类型的引号,例如双引号。

你可以使用双引号来代替反斜杠转义引号。

2021-08-04 03:47:52