-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 をプルしています)

adtags にタグが 1 つしか含まれていない場合に 1 つのインスタンスを見つけることができる場所でこれを機能させることができ、queryvar メソッド ID を削除しました。 )

これを行うには、%home% などのワイルドカードを使用する必要があると思います

where   fv1.field_value like '%home%'   

しかし、queryvar が %s として参照されている場合、どうすればこれを達成できますか? どうにかしてこれをエスケープできますか?

ありがとう

4

2 に答える 2

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 に答える
0

ワイルドカードは、部分文字列を一致させるためのものです。たとえば、「%home%」は「come home」、「three home runs」、および「homeward bound」に一致します。

あなたはオペレーターを探していinます。これは良い出発点かもしれません:

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

于 2013-02-03T19:57:12.043 に答える