web-dev-qa-db-ja.com

SQL文のwordpressで%like%を使用する方法

私はのようなワードプレスで%text%ステートメントを使用します。

SELECT *  FROM location  WHERE name LIKE "%on" OR name LIKE "%on%"

私は何でも試したが実行されません:

$wpdb->get_results($wpdb -> prepare("SELECT *  FROM location  WHERE name LIKE %1s OR name LIKE %2s", '%'.like_escape('on'), '%'.like_escape('on').'%'), ARRAY_A);

私を助けてください

1
rocky

$wpdb->prepare()は実際にはsprintf()プレースホルダーを完全にはサポートしていません。

コーデックスから

Prepareのqueryパラメータはsprintf()のようなプレースホルダを受け入れます。 %s(文字列)、%d(整数)、および%f(float)形式がサポートされています。

それはそれから完全に明白ではないが、引数交換フォーマット(例えば%1$d)はサポートされない(どんな場合でもあなたは間違った構文を持っている:それは%2$sの代わりに%2sであるべきです)

global $wpdb;
$wpdb->prepare(
        "SELECT *  FROM location  
         WHERE name LIKE %s OR name LIKE %s", 
         '%'.$wpdb->esc_like('on'), 
         '%'.$wpdb->esc_like('on').'%'
), ARRAY_A);

私は 'on'が未知の値に置き換えられるかもしれないと思っています - そうでなければ$wpdb->prepare()は必要ありません。無関係なメモとして、SQLの2番目の条件は最初のものを時代遅れにします。

4
Stephen Harris