在PHP/MySQL中转义转义引号

在PHP/MySQL中转义转义引号,php,escaping,mariadb,Php,Escaping,Mariadb,我有一个包含文本“test”“test”的字段 当我想基于此字段选择此行的数据时,我必须执行以下操作: select * from test where field like '%test \\\\\'test%'; 为什么是5“\”而不是3?如何使用addslashes或mysql\u real\u escape\u string等PHP函数从原始文本中获取此字符串 (10.0.16-MariaDB;PHP5.3.3,Centos 6.5) 一个\用于转义“另外两个\用于转义另外两个\”(因

我有一个包含文本“test”“test”的字段 当我想基于此字段选择此行的数据时,我必须执行以下操作:

select * from test where field like '%test \\\\\'test%';
为什么是5“\”而不是3?如何使用addslashes或mysql\u real\u escape\u string等PHP函数从原始文本中获取此字符串

(10.0.16-MariaDB;PHP5.3.3,Centos 6.5)


一个\用于转义“另外两个\用于转义另外两个\”(因此其中有五个)。 因此,您的php发送到数据库three\和“
(\\\”)
,然后您的数据库使用one\来转义第二个\第三个用于转义”。期末考试有\'(根据需要)


将输出
“test\\\\'test”
,因为函数可以看到:
“test'test”
(没有反斜杠,因为baskslash被php用来解析字符串)。所以mysql\u real\u escape\u string输出不正确,因为您的字符串输入不正确。

使用mysql\u real\u escape\u string()echo mysql\u real\u escape\u string(“test\test”)==>“test\\\'test”,这是我得到的结果,在SQL中,它只适用于5*\无论如何,我建议使用prepare语句,忘记mysql\u real\u escape\u string。那么如何从“test\test”中获得“test”呢?这是相反的方法。你从“测试”中得到“测试”。首先,将“test”放在php代码的某个地方。php解析这个字符串并转义一些字符,所以它的输出是“test\\\'test”——这是发送到数据库的内容。您的数据库接收这个字符串并解析它(当然还有转义字符),所以当您将“test”“test”放入函数mysql\u real\u escape\u string时,数据库引擎获取(并使用)字符串“test”“test”,php首先解析您的字符串和转义字符。所以mysql\u real\u escape\u字符串函数接收“test”test。因此,mysql\u real\u escape\u字符串的输出不是您所期望的。不,我对mysql\u real\u escape\u字符串的理解是错误的。mysql\u real\u escape\u string得到“test\test”,但它不知道,您想要这个特定的字符串,它假设您想要用那个唯一的反斜杠“escape”。因此,它最终以数据库引擎具有“test”test的方式逃逸
echo mysql_real_escape_string("test \'test")