「wpdb->prepare」のプレースホルダの引数を動的にセットする!
ワードプレスでDBの検索をするときに、「wpdb->prepare()」というのを使ってSQL構文を準備しますよね。
↓こんな感じで使うやつです。
global $wpdb; $prepared = $wpdb->prepare( 'SELECT * FROM wp_post WHERE post_type = %s AND post_status = %s AND post_author = %d', 'post', 'publish', 1); $result = $wpdb->get_results($prepared);
上記は3つの値「post」「publish」「1」を、検索条件のプレースホルダとして渡しています。
このプレースホルダを動的に複数個設定したいときがあります。
ユーザーが自由に検索条件などをセットするときなどに、こういうのが必要になるんですね。
↓下記のようにすると、検索条件のプレースホルダを自由に追加していくこと出来ます。
global $wpdb; $args = array(); $sql = "SELECT * FROM wp_post WHERE post_type = %s"; $args[] = $post_type; if ($post_status){ $sql .= " AND post_status = %s"; $args[] = $post_status; } if ($post_author){ $sql .= " AND post_author = %d"; $args[] = $post_author; } $prepare_query = call_user_func_array(array($wpdb, 'prepare'), array_merge(array($sql), $args)); $result= $wpdb->get_results($prepare_query);
「call_user_func_array()」という関数を使うと、指定した関数にいくつも引数をセットして、呼び出すことことができるんですね。
(こんな便利な関数があるって知りませんでした・・)
以上!