2013-02-03 83 views
-1

我使用的是SQL語句中一個變種,它會檢查可能有許多標籤如以類似聲明

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)

使用VAR

我可以得到這個工作,我可以找到一個實例,如果adtags只包含一個標籤,我刪除了queryvar methid - 但我想要做的是搜索fv1.field_value的發生$ queryVar(家庭或任何東西多數民衆贊成通過)

我認爲爲了做到這一點,我需要使用通配符,比如%HOME%

where fv1.field_value like '%home%' 

但我怎麼做到這一點,當queryvar作爲%s的引用,可我莫名其妙地逃脫了這一點?

感謝

+3

使用準備好的語句,不要把PHP變量直接從SQL它會讓你容易受到SQL注入 –

回答

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)); 
+0

喜,更新SQL – mro

+0

我我的答案更新。 – drolex

+0

非常感謝,所有工作 - 感謝有關逃跑的建議。乾杯 – mro

0

通配符匹配的子字符串,如「%HOME%」將與「回家」,「三個本壘打」和「返鄉」。

您正在尋找in運營商,這可能是一個很好的起點:

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

+0

感謝 - 我會看入以及 – mro