我的表格中有一些标签有(%),例如:%tag
或tag%
我正在使用PDO准备好的声明,我的问题是如果我需要转义%
或者像这样离开它:
$query = "SELECT * FROM table where tags like :tags";
$tags = 'tag%';
//or
$tags = 'tags\%';
$sth->prepare($query);
$sth->bindValue(":tags", '%'.$tags.'%');
更新:
当我使用以下方法搜索test%test
时,列值为test%test
:LIKE %test%test
没有转义,但是我希望找到包含%的所有标记,因此当我使用{{ 1}}没有转义,即使列不包含%%%
答案 0 :(得分:3)
从阅读评论中,我认为你的问题是:
[LIKE %%%
和%test%test%
之间的区别也是如此'%\ %%'。
虽然我确定你知道大部分内容,但为了清晰起见,我将从头开始。
'%' 条款是一个'通配符'它匹配任何东西。有关详细信息,请参阅http://www.w3schools.com/sql/sql_wildcards.asp。 (如果您熟悉表达语言,则类似于'。*')
' \%' 逃脱了#通配符'功能,让您匹配'%'字符串中的字符。 (在表达语言中它与' \。'相同,允许你匹配字符串中的点)
所以在你的情况下:
' %%%' 表示: [匹配任何内容] [匹配任何内容] [匹配任何内容] ,并且相同as'%'
'%test%test%' 表示: [任何]测试[任何]测试[任何] ,并且因为有两个测试'在字符串中,它是一个匹配。匹配包括' testtest' asfasdftestasfasftest' asfasftesttestasdfsd',' test %%%% test',' %% %%%测试%%%%测试%%%%'
'%\ %%' 表示: [任何]%[任何] ,只要该字符串包含'%'字面意思是匹配。匹配包括' %%%%%',' asdfasdf%dsaf','%dasfa',' asdfasdf%',&# 39; ASDF %% dsaf %%大法%DAF%'
如果这已经回答了你的问题,请告诉我。
答案 1 :(得分:-2)
我个人会这样做:
$query = "SELECT * FROM tabler WHERE tags LIKE :tags";
$sth->prepare($query);
$sth->bindValue(':tags', "%{%tags}%";