私がこれをすると:
$transients = $wpdb->get_col(
"
SELECT option_name
FROM $wpdb->options
WHERE option_name
LIKE '_transient_wb_tt_%'
"
);
それはうまく働きますが、私がprepareを使うときはこんな感じで:
$transients = $wpdb->get_col( $wpdb->prepare(
"
SELECT option_name
FROM %s
WHERE option_name
LIKE '_transient_wb_tt_%'
",
$wpdb->options
) );
うまくいかない、ここで何をしているの?
@ bainternetに同意します。 $wpdb->prepare
は必要ありません。ユーザー提供のコンテンツはありません。
質問に対する答えは、ワイルドカード%
をprepare
を通過させるには、コード内でそれを2倍にする必要があるということです。
LIKE '_transient_wb_tt_%%'
生成されたクエリをよく見たい場合は、これを試してください。
var_dump($wpdb->prepare("
SELECT option_name
FROM %s
WHERE option_name
LIKE '_transient_wb_tt_%%'
",
'abc'));
die;
不要なこと以外に、$wpdb->prepare
をこのように使用しても機能しません。 prepare
を使用してテーブル名を交換しようとすると、テーブル名の前後に引用符が付きます。それは無効なSQLです。クエリは単純にする必要があります。
SELECT option_name
FROM {$wpdb->options}
WHERE option_name
LIKE '_transient_wb_tt_%%'