$wpdb->get_results() の使い方|説明・引数・注意点

説明

$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

コメント

タイトルとURLをコピーしました