逃避PHP / MySQL中的转义引用

时间:2015-03-16 10:56:41

标签: php escaping mariadb

我有一个包含文字的字段" test \' test" 当我想根据这个字段选择这一行的数据时我必须这样做:

select * from test where field like '%test \\\\\'test%';

为什么5" \"而不是3?如何使用像addslashes或mysql_real_escape_string这样的PHP函数从原始文本中获取此字符串?

  

(10.0.16-MariaDB; PHP 5.3.3,Centos 6.5)

1 个答案:

答案 0 :(得分:0)

一个\用于逃避'另外两个用于逃避两个\(因此其中五个)。 所以你的PHP发送到数据库三\和' (\\\'),你的数据库然后使用一个\来逃避第二个\而第三个用于转义'。在决赛中有\#39; (根据需要)

echo mysql_real_escape_string("test \'test")

将输出"test \\\'test"因为函数看到:"test 'test"(没有backslas,因为baskslash被php吃掉以解析字符串)。所以mysql_real_escape_strings输出不正确,因为你的字符串输入不正确。