-1

我的表中有一些标签有 (%) 例如:%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%testusing: LIKE %test%testits ok without escape 时,但我想找到所有包含 % 的标签,所以当我在%%%没有转义的情况下使用它时,即使列不包含它也会显示所有结果%

演示:http ://sqlfiddle.com/#!2/ae24e/6

4

2 回答 2

3

通过阅读评论,我认为您的问题是:[LIKE%%%和 like之间有什么不同%test%test%] 以及 '%\%%'。

虽然我确信您知道其中的大部分内容,但为了清楚起见,我将从头开始。

  • SQL like 子句中的“%”是一个“通配符”,它匹配任何内容。有关详细信息,请参阅http://www.w3schools.com/sql/sql_wildcards.asp。(如果您熟悉表达式语言,它类似于 '.*')

  • 另一方面,“\%”转义了“通配符”功能,使您能够匹配字符串中的“%”字符。(在表达式语言中,它与 '\.' 相同,允许您匹配字符串中的点)

所以在你的情况下:

  • '%%%'意思是:[匹配任何东西][匹配任何东西][匹配任何东西],和'%'一样

  • '%test%test%' 的意思是:[anything]test[anything]test[anything],只要字符串中有两个 'test' 就是匹配的。匹配将包括'testtest'、'asfasdftestasfasftest'、'asfasftesttestasdfsd'、'test%%%%test'、'%%%%%test%%%%test%%%%'

  • '%\%%'表示:[anything]%[anything],只要字符串有 '%' 文字,它就会匹配。匹配项包括 '%%%%%'、'asdfasdf%dsaf'、'%dasfa'、'asdfasdf%'、'asdf%%dsaf%%dafa%daf%'

让我知道这是否回答了您的问题。

于 2013-10-16T22:50:33.917 回答
-2

我个人会这样做:

$query = "SELECT * FROM tabler WHERE tags LIKE :tags";
$sth->prepare($query);
$sth->bindValue(':tags', "%{%tags}%";
于 2013-10-08T09:07:03.677 回答