我在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时,如何实现这一点,我可以以某种方式解决这个问题吗?
由于
答案 0 :(得分:0)
通配符用于匹配子字符串,例如“%home%”将匹配“come home”,“three home runs”和“homeward bound”。
您正在寻找in
运营商,这可能是一个很好的起点:
答案 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));