-1

我在 sql 语句中使用了一个 var,它检查一个可能有很多标签的字段,例如

adtags="home, about, article"

$queryVar = 'home'



$bannerName = $wpdb->get_results($wpdb->prepare("select  pic.filename
,       pic.pid
,       fv1.field_value as MovieName
,       fv2.field_value as Adlink
from    ngg_pictures pic
inner join 
    nggcf_fields f1
on      f1.field_name = 'adtags'
inner join 
    nggcf_field_values as fv1
on      fv1.pid = pic.pid
    and fv1.fid = f1.id
inner join 
    nggcf_fields f2
on      f2.field_name = 'adlink'
inner join 
    nggcf_field_values as fv2
on      fv2.pid = pic.pid
    and fv2.fid = f2.id
where   fv1.field_value like '%s'   ",$queryVar));

注意(fv1.field_value 正在拉取广告标签)

如果 adtags 只包含一个标签,我可以在其中找到一个实例,并且我删除了 queryvar 方法,我可以让它工作,但我想做的是搜索 fv1.field_value 以查找 $queryVar 的出现(home 或任何传递的东西)

我认为为了做到这一点,我需要使用通配符,例如 %home%

where   fv1.field_value like '%home%'   

但是当查询变量被引用为 %s 时,我该如何实现这一点,我可以以某种方式逃避它吗?

谢谢

4

2 回答 2

0

通配符用于匹配子字符串,例如 "%home%" 将匹配 "come home"、"three homeruns" 和 "homeward bound"。

您正在寻找in运营商,这可能是一个很好的起点:

http://www.w3schools.com/sql/sql_in.asp

于 2013-02-03T19:57:12.043 回答
0

答案 1

将有助于查看整行代码。只需将变量放在字符串中。

"where fv1.field_value like '%$queryVar%'";

在此之前,您可以做一些事情来避免可能的查询注入。

只取第一个词。

$queryVar = preg_replace('/\s.*$/', '', $queryVar);

只取字母。

$queryVar = preg_replace('/[^a-z]+/i', '', $queryVar);

答案 2

在查询之前执行此操作:

$queryVar = "%$queryVar%";

答案 3

用 % 转义。

where   fv1.field_value like '%%%s%%'   ",$queryVar));
于 2013-02-03T20:02:56.633 回答