説明
$wpdb->get_results() は、SELECT文を実行し、結果の複数行を配列で取得するメソッドです。
基本構文
$wpdb->get_results( string $query = null, string $output = OBJECT ): array|object|null
引数
$query:SQL文$output:OBJECT/ARRAY_A/ARRAY_N/OBJECT_K
戻り値
結果の配列。該当なしなら空配列。
使い方(サンプル)
global $wpdb;
$rows = $wpdb->get_results(
$wpdb->prepare( "SELECT ID, post_title FROM {$wpdb->posts} WHERE post_status = %s LIMIT %d", 'publish', 5 )
);
注意点
- 値を埋め込むSQLは、必ず
$wpdb->prepare()を通します。 - テーブル名は
$wpdb->postsのようなプロパティで指定し、接頭辞を直書きしません。 - 大量の行を取得するとメモリを圧迫します。
実務での使いどころ
- 複数行の結果を、取得するとき。
- カスタムテーブルや、投稿の独自の検索結果を、取得するとき。
よくあるミスと対処
- 変数を、直接SQLに入れている。SQLインジェクションの原因になる。
$wpdb->prepare()を使う。 - 結果が、1件もないときは、空の配列。失敗と、区別して扱わない。
- 大量のデータを、一度に取得している。
LIMITで、件数を絞る。 $outputの既定は、オブジェクト。配列で受け取りたいときは、ARRAY_Aを指定する。
NG例
$rows = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}logs WHERE user_id = $user_id" ); // 変数を直接入れている
OK例
$rows = $wpdb->get_results(
$wpdb->prepare( "SELECT * FROM {$wpdb->prefix}logs WHERE user_id = %d LIMIT 100", $user_id )
);
foreach ( $rows as $row ) {
echo esc_html( $row->message );
}
使い分け早見表
| メソッド | 取得するもの |
|---|---|
$wpdb->get_results() |
複数行 |
$wpdb->get_row() |
1行 |
$wpdb->get_var() |
1つの値 |
$wpdb->get_col() |
1列(値の配列) |
関連項目
$wpdb->prepare()、$wpdb->get_row()、$wpdb->get_var()
公式リファレンス:wpdb::get_results() | Class method | WordPress Developer Resources

コメント