- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题:
注意: NO_BACKSLASH_ESCAPES模式已启用。
我正在使用mysqli准备的语句来查询数据库。目标代码如下:
$conn = new mysqli('localhost', 'root', 'mypass', 'mydb');
$stmt = $conn->prepare('select * from `table` where `data` like ?;');
JDxDD
,
JD_DD
和
JD\DD
:
INSERT INTO `table` SET `data` = 'JDxDD';
INSERT INTO `table` SET `data` = 'JD_DD';
INSERT INTO `table` SET `data` = 'JD\DD';
$stmt = $conn -> prepare('SELECT * from `table1` where `data` like ?;');
$key = 'JD_DD';
$stmt -> bind_param('s', $key);
$stmt-> execute();
JD_DD
的代码(即排除
JDxDD
和
JD\DD
)。因此,作为
here的答案,我需要使用
_
的
escape
关键字对
$key = 'JD\_DD';
进行转义。
$stmt = $conn -> prepare('SELECT * from `table1` where `data` like ? escape \'\\\';');
/*
first and last \ are for putting the ' quote,
middle 2 are for putting a \ as a part of string.
*/
false
,调用
$conn->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 ''\'' at line 1
Syntax error
:
$stmt = $conn -> prepare("SELECT * from `table1` where `data` like ? escape '\\';");
$stmt = $conn -> prepare("SELECT * from `table1` where `data` like ? escape '\';");
$key = 'JD\_DD';
可以与
LIKE
运算符(而不是
=
)一起有效地使用,但这只是一个示例。
$key
可以很复杂,例如
'JD\_D%\_X%';
等。
$stmt = $conn -> prepare("SELECT * from `table1` where `data` like ? escape '|';");
$key = 'JD|_DD';
$stmt->bind_param('s', $key);
escape
单词:
$stmt = $conn -> prepare('SELECT * from `table1` where `data` like ?;');
$key = 'JD\_DD';
$stmt->bind_param('s', $key);
JD_DD
输出。
为什么? 即使使用
NO_BACKSLASH_ESCAPES MODE
ENABLED ,为什么
\
仍可以用作转义符?
$stmt = $conn -> prepare("SELECT * from `table1` where `data` like ? escape '\\\';");
$key = 'JD\_DD';
$stmt->bind_param('s', $key);
$stmt = $conn -> prepare("SELECT * from `table1` where `data` like ? escape '\\\\';");
$key = 'JD\_DD';
$stmt->bind_param('s', $key);
If you need to match the characters _ or %, you must escape them. By default, you can prefix the wildcard characters the backslash characer \ to escape them. The backslash is used both to encode special characters like newlines when a string is parsed as well as to escape wildcards in a pattern after parsing. Thus, to match an actual backslash, you sometimes need to double-escape it as "\\\\".
To avoid difficulties with the backslash character, you can change the wildcard escape character using ESCAPE in a LIKE expression. The argument to ESCAPE must be a single-character string.
select 'a%b' like '%\%\%';
按预期返回
0
。)
like
子句的任何帮助。
=
而不是
LIKE
将无济于事。根据用户的偏好,可能会有通配符。例如,如果用户希望根据他的输入(例如
'J%D'
)获取所有相关建议,则该查询将变为
WHERE data LIKE '%J\%D%';
。如果用户只想获取他输入的内容,那么我可以肯定地使用
=
代替
LIKE
。
INSERT INTO table set name = 'abc\def';
abcdef
。
INSERT INTO table set name = 'xyz\\pqr';
xyz\pqr
。
SELECT * FROM table where name = 'abc\def';
abcdef
。
SELECT * FROM table where name = 'abc\\def';
SELECT * FROM table where name = 'xyz\pqr';
SELECT * FROM table where name = 'xyz\\pqr';
xyz\pqr
。
SELECT * FROM table where name LIKE 'abc\def';
abcdef
。
SELECT * FROM table where name LIKE 'abc\\def';
abcdef
。
不可预期的。 (8)是否仅在存在
abc\def
时才显示?
SELECT * FROM table where name LIKE 'xyz\pqr';
SELECT * FROM table where name LIKE 'xyz\\pqr';
xyz\pqr
?
INSERT INTO table set name = 'abc\def';
abc\def
。
INSERT INTO table set name = 'xyz\\pqr';
xyz\\pqr
。
SELECT * FROM table where name = 'abc\def';
abc\def
(插入11)。
SELECT * FROM table where name = 'abc\\def';
SELECT * FROM table where name = 'xyz\pqr';
xyz\pqr
(插入2)。
SELECT * FROM table where name = 'xyz\\pqr';
xyz\\pqr
(插入12)。
SELECT * FROM table where name LIKE 'abc\def';
abcdef
(插入(1))。
不可预期的。启用此模式后,我希望它按字面意义使用
\
(除非与
escape = '\'
一起使用)。预期结果是
abc\def
(插入11)。
SELECT * FROM table where name LIKE 'abc\\def';
abc\def
(在(11)处插入)。
不可预期的。启用此模式后,我希望它能同时使用
\\
。预期结果为0行,因为没有像
abc\\def
这样的数据。
SELECT * FROM table where name LIKE 'xyz\pqr';
\
。预期结果是
xyz\pqr
(插入2)。
SELECT * FROM table where name LIKE 'xyz\\pqr';
xyz\pqr
(在(11)处插入)。
不可预期的。启用此模式后,我希望它能同时使用
\\
。预期结果是
xyz\\pqr
(插入12)。
INSERT
和
WHERE col = value
中进行操作-设置为ON时,逐字逐字地获取每个
\
。
WHERE col LIKE value
,它变得如上所示变得奇怪。
LIKE
子句,即使将模式设置为ON,也不按字面意义使用
\
。
LIKE
子句的一些非常基本的知识。任何澄清都非常欢迎!
最佳答案
只需使用=
而不是LIKE
??
仅当需要LIKE
和/或%
的通配符操作时,才应使用_
。
修改后的案例
要求:
LIKE
:
WHERE LEFT(data, CHAR_LENGTH($input)) = $input
LIKE
的情况下使
NO_BACKSLASH_ESCAPES
工作:
%
并执行
LIKE
。
data
中的任何位置,则
WHERE INSTR($input, data)
关于php - 使用LIKE子句和NO_BACKSLASH_ESCAPES模式在mysqli prepare()中转义%号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51317421/
我有一个 javascript 从用户输入中读取的 URL。这是 JavaScript 代码的一部分: document.getElementById("Snd_Cont_AddrLnk_BG").v
我将如何在 javascript 中转义斜杠// var j = /^(ht|f)tp(s?)://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$;/ 最佳答案 使用 \ 进行转
在解析到这样的对象之前,我要转义 & 和 =: var obb = parseJSON('{"' + text.replace(/&/g, "\",\"").replace(/=/g,"\":\"")
我正在使用 freemarker 生成一个 freemarker 模板。但我需要一些方法来转义 freemarker 标签。 我将如何逃脱 标签或 ${expression} ? 最佳答案 您也可以使
我正在尝试匹配方括号,即 excel 中正则表达式 VBA 中的 []。我正在尝试使用以下代码,但它不起作用。 Public Function IsSpecial(s As String) As L
我通过设置将 PowerShell 添加到我的上下文菜单中: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\she
我需要转义 $,因此我需要将所有出现的 $ 替换为 \$ 所以我写了这个方法: // String#replaceAll(String regex, String replacement) publi
我正在格式化我的问题。非常遗憾。这是我的问题的摘要 在 JSP 中我有一个字段 我输入的值类似于“cQN==ujyRMdr+Qi8dO9Xm*eRun+ner==aLTyt?aKmGI” 实际行动
我有一个文本文件,其内容是C:\temp 我想要值 C:\temp替换为从变量定义的不同值 此外,将从批处理文件(windows .cmd)中调用 perl oneliner set CMDDIR=C
有没有办法使用 jTemplates 来转义 {$,这样我就可以在 onBlur 中使用内联 javascript,例如 telegraaf 在 processTemplate 之后得到这个: 谢谢
我正在尝试将 wget 与包含“#”符号的 url 一起使用。无论我做什么来逃避这个角色,它都不起作用。我用过\、' 和 "。但它们都不起作用。有人有什么建议吗? 谢谢! 最佳答案 如果您真的想让它有
我想知道如何从数据库中回显带有 $ 符号的字符串。此时,数据库中的值“Buy one for $5.00”将转换为“Buy one for .00”。 假设该字段的名称为 title,值为 Buy o
我在 mySQL 中有一个查询,旨在返回我们网站上使用的搜索词。是的,这是一个标签云,是的,我知道它是一条鲻鱼 :) 我们有一个管理页面,管理员可以在其中查看搜索词并选择将它们排除在云端之外。这些词进
我有一个文本区域。在其点击事件上。我将其插入数据库中,然后将其显示为元素列表中的第一个元素。问题是。如果我输入""在textarea中,jquery无法正确显示。它显示为空。代码是 var note
我想知道是否有某种字符串前缀,这样 cstring 就可以按原样使用,而不需要我转义所有字符。我不是 100% 确定。我记得一些关于在字符串前加上 @ 符号( char str[] = @"some\
这个问题在这里已经有了答案: How do I escape curly-brace ({}) characters in a string while using .format (or an f
C/C++编译器如何操作源代码中的转义字符["\"]?如何编写用于处理该字符的编译器语法?遇到那个字符后,编译器会做什么? 最佳答案 大多数编译器分为几个部分:编译器前端称为 lexical anal
我计划接受用户输入,并将其插入到一个 div 中 user_content 一个用户提供内容,另一个用户接收内容。 我认为我会遵循的建议来自 https://www.owasp.org/index.p
我有一个这种形式的 url - http:\\/\\/en.wikipedia.org\\/wiki\\/The_Truman_Show。我怎样才能使它成为正常的网址。我试过使用 urllib.unq
我有一个带有转义数据的字符串 escaped_data = '\\x50\\x51' print escaped_data # gives '\x50\x51' 什么 Python 函数会对其进行反转
我是一名优秀的程序员,十分优秀!