BuddyPressグループをカスタム検索しようとしています。
これが私の方法です:
public function search_groups($string){
global $wpdb;
$results = $wpdb->get_results($wpdb->prepare(
"
SELECT *
FROM {$wpdb->prefix}bp_groups
WHERE `name` LIKE '%%s%'
AND `description` LIKE '%%s%'
AND `status` = 'public'
ORDER BY `name` ASC
",
$string,
$string
));
if(!empty($results)){
$return = $results;
} else{
$return = false;
}
return $return;
}
しかし、WordPressデータベースエラーが発生しています。変数の置換に%記号を使用しているので、$wpdb->prepare();
を使用しているという事実によると確信しています。
クエリのこの部分を見てみましょう:
WHERE `name` LIKE '%%s%'
AND `description` LIKE '%%s%'
それはただ問題のようです。私はの線に沿って何かを達成することができる方法はありますか...
WHERE `name` LIKE '%{$string}%'
AND `description` LIKE '%{$string}%'
それでも$wpdb->prepare();
メソッドを使いますか?
私は私の質問に対する解決策を考え出しました。
まず最初に、私のオリジナルのクエリでは、グループ名とグループの説明を検索するために、ANDではなくORを指定する必要があります。 (結果が歪んでいました。)
そして、LIKEステートメントで自分の '%'を二重エスケープする必要がありました。
これは正しく動作するように更新されたクエリです:
SELECT *
FROM {$wpdb->prefix}bp_groups
WHERE `name` LIKE '%%%s%%'
OR `description` LIKE '%%%s%%'
AND `status` = 'public'
ORDER BY `name` ASC
$wpdb->query
と$wpdb->prepare
を使った例:
global $wpdb;
$wpdb->query( $wpdb->prepare(
'DELETE FROM %s WHERE `option_name` LIKE %s',
$wpdb->options,
$wpdb->esc_like(PLUGIN_SLUG . '%%')
) );