在类似的语句中使用var

时间:2013-02-03 19:53:04

标签: php sql

我在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)

如果adtags只包含一个标签,我可以找到一个实例,我可以找到一个实例,我删除了queryvar methid - 但我想要做的是搜索fv1.field_value以查找$ queryVar(home或者任何通过的事情)

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

where   fv1.field_value like '%home%'   

但是当queryvar被引用为%s时,如何实现这一点,我可以以某种方式解决这个问题吗?

由于

2 个答案:

答案 0 :(得分:0)

通配符用于匹配子字符串,例如“%home%”将匹配“come home”,“three home runs”和“homeward bound”。

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

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

答案 1 :(得分: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));