【WordPress】wpdbクラスでデータベースからデータを取得する例

WordPressには、データベースを操作できるwpdbクラスがあります。

今回は、そのwpdbクラスでデータベースからデータを取得する簡単な例となります。

wpdbクラスでデータベースからデータを取得する例

wpdbクラスでは、そのインスタンスとなるグローバル変数の$wpdbオブジェクトにアクセスすることで、データベースを扱えます。

例では、その$wpdbオブジェクトを利用して、postmetaテーブルのすべてのカラムを検索し、次の2つの条件を満たす行をオブジェクトの配列で取得します。

  • post_idの値が2
  • meta_valueの値に'サンプル'という文字列が含まれる

以下、ソースコードの例となります。

<?php
$id = 2;
$meta_value = 'サンプル';

$query = $wpdb->prepare( 
	"
	SELECT * 
	FROM $wpdb->postmeta
	WHERE 
		post_id = %d AND
		meta_value LIKE %s
	", 
	$id,
	'%' . $meta_value . '%'
);

$results = $wpdb->get_results( $query );
?>

上記の例では、wpdbクラスのget_resultsメソッドとprepareメソッドでSQLを利用し、指定したテーブルからデータを取得しています。

SQLでテーブルを検索する方法については、以下のリンク先を参考にしてみてください。

自作テーブルを扱う場合

wpdbクラスで自作テーブルを扱う場合には、wpdbクラスをカスタマイズする必要があります。詳しくは以下のリンク先を参考にしてみてください。

get_results()について

get_results メソッドでは、第1引数に指定したSQLクエリをテーブルに対して実行し、結果を行ごとに配列で返します。

get_results()のパラメーター

get_resultsメソッドのパラメーターはそれぞれ以下となります。

$wpdb->get_results( $query, $output_type );

$query(必須)

実行するSQL クエリ。

$output_type(任意)

戻り値の配列の内容を、以下のいずれかの定数で指定。初期値は OBJECT。

定数戻り値の配列について
OBJECT インデックス配列で返し、その配列の値は行のオブジェクト
OBJECT_K配列のキーを第1カラムの値(重複は無視)で返し、その配列の値は行のオブジェクト
ARRAY_Aインデックス配列で返し、その配列の値は連想配列(キーがカラム名・値がカラムの値)
ARRAY_Nインデックス配列で返し、その配列の値はインデックス配列(値がカラムの値)

データベースエラーが発生した場合は、戻り値が空の配列になります。 $query が空文字列であるか、無効な $output_type を指定すると、NULL が返されます。

prepare()について

prepare メソッドは、SQL インジェクション攻撃からクエリを保護するために、プレースホルダーを使用してエスケープしたSQLクエリを返します。

利用できるプレースホルダーは以下となります。

  • %s(文字列)
  • %d(整数)
  • %f(浮動小数点)

SQL インジェクション攻撃については、文末の参考サイト内を確認してみてください。

prepare()のパラメーター

prepareメソッドのパラメーターはそれぞれ以下となります。

$wpdb->prepare( $query, $value_parameter[, $value_parameter ... ] );

$query(必須)

プレースホルダーを使用したSQL クエリ。

$value_parameter(必須)

プレースホルダーへ代入する値を、プレースホルダーごとに指定。また、プレースホルダーを値とした配列を第2引数として指定することも可能。

wpdbクラスで実行したSQLクエリのデータについて

wpdbクラスで実行したSQLクエリのデータは、クラス変数にセットされ取得できます。

以下、SQLクエリのデータを取得できるプロパティの一部の例となります。

最後に実行されたSQLクエリを取得

$wpdb->last_query

最後に実行されたクエリの結果を取得

$wpdb->last_result

まとめ

以上がwpdbクラスでデータベースからデータを取得する簡単な例となります。

wpdbクラスの詳細については、文末の参考サイト内を確認してみてください。

参考サイトなど

コメント投稿コメント投稿欄を開く

コメントは項目欄(*は必須項目)を入力し、「コメントを送信」ボタンをクリックしてください。 (メールアドレスは公開されることはありません。コメントの公開は承認制となります。)

また、多忙によりコメントには返信できない場合があります。

Twitterで返信する場合はこちらから。