スキルアップを始める!

【WordPress】wpdbクラスを使ってDBのデータを取得・操作する方法

WordPress(ワードプレス)
この記事は約8分で読めます。
\ワードプレスのスキルアップはこちら!/ WordPress入門読本

以前から何度かに渡ってワードプレスのデータベースのレコードやカラムを取得する方法について書いていますが、改めて$wpdbクラスについてまとめてみます。

get_resultsでクエリを呼び出す

get_resultsを使ってクエリのデータを読み込むことができます。

$result = $wpdb->get_results($query);

WordPressにはwpdbというクラスが定義されています。 このクラスには、データベースとのやりとりに使用される一連の関数が含まれています。 その主な目的は、WordPressデータベースとのインターフェイスを提供することですが、他の適切なデータベースと通信するために使用することもできます。 クラスのコードは ジャスティン・ヴィンセント氏 が作成し、管理している ezSQL クラスに概ね基づいています。

https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wpdb_Class

例えば、下記のように呼び出すことができます。

$query = 'SELECT post_title FROM wp_posts WHERE post_author = 2 AND post_type="post"';
$result = $wpdb->get_results($query,OBJECT);
print_r($result);

wp_postsテーブル内から、post_author(ユーザーIDと同じ?)が2、post_typeが投稿になっているレコード内のpost_title(投稿タイトル)を抽出して出力します。

出力結果▼

出力されました!

get_resultsの第2引数(output_type)

関数リファレンスによると、この第2引数(output_type)は結果を出力するときの種類を指定するようです。※引数が指定されていない場合はOBJECTが設定される。

<?php $wpdb->get_results( $query, $output_type ); ?>

OBJECT – 結果をインデックス配列として出力。要素は行オブジェクト。
OBJECT_K – 結果を連想配列として出力。第1カラムの値をキー(重複は無視される)、行オブジェクトを値とする。
ARRAY_A – 結果をインデックス配列として出力。要素は1行を表す連想配列で、そのキーはカラム名。
ARRAY_N – 結果をインデックス配列として出力。要素は1行を表すインデックス配列。

それぞれを指定した場合の中を見てみます。

[rml_read_more]

OBJECT

OBJECT・・・結果をインデックス配列として出力。要素は行オブジェクト。

$query = 'SELECT post_title FROM wp_posts WHERE post_author = 2 AND post_type="post"';
$result = $wpdb->get_results($query,OBJECT);
print_r($result);

インデックス配列として出力されています。

OBJECT_K

OBJECT_K・・・結果を連想配列として出力。第1カラムの値をキー(重複は無視される)、行オブジェクトを値とする。

$query = 'SELECT post_title FROM wp_posts WHERE post_author = 2 AND post_type="post"';
$result = $wpdb->get_results($query,OBJECT_K);
print_r($result);

結果が連想配列として出力されています。

ARRAY_A

ARRAY_A・・・結果をインデックス配列として出力します。要素は1行を表す連想配列で、そのキーはカラム名。

$query = 'SELECT post_title FROM wp_posts WHERE post_author = 2 AND post_type="post"';
$result = $wpdb->get_results($query,ARRAY_A);
print_r($result);

インデックス配列として出力されました。

ARRAY_N

ARRAY_N・・・結果をインデックス配列として出力。要素は1行を表すインデックス配列。

$query = 'SELECT post_title FROM wp_posts WHERE post_author = 2 AND post_type="post"';
$result = $wpdb->get_results($query,ARRAY_N);
print_r($result);

インデックス配列として出力されました。

インデックス配列とは?

整数をキーとする配列のことをいいます。get_resultsの第2引数(output_type)をOBJECTで指定した場合です。

今回の場合は下記のような形式になっています。

Array ( [0] => stdClass Object ( [post_title] => 投稿フォーマット: ギャラリー ) [1] => stdClass Object ( [post_title] => 投稿フォーマット: 画像(リンク) ) [2] => stdClass Object ( [post_title] => 投稿フォーマット: オーディオ ) [3] => stdClass Object ( [post_title] => 投稿フォーマット: 画像 ) [4] => stdClass Object ( [post_title] => 投稿フォーマット: 画像(キャプション) ) [5] => stdClass Object ( [post_title] => ) [6] => stdClass Object ( [post_title] => 極端な例: コンテンツのない投稿 ) [7] => stdClass Object ( [post_title] => Pneumonoultramicroscopicsilicovolcanoconiosis ) )

配列についての詳細はこちら▼

PHP: 配列 - Manual

連想配列とは?

連想配列とは、キー名=>値として、キー名を配列に設定できる配列の指定方法です。get_resultsの第2引数(output_type)をOBJECT_Kで指定した場合です。

下記のような出力結果になります。

Array ( [投稿フォーマット: ギャラリー] => stdClass Object ( [post_title] => 投稿フォーマット: ギャラリー ) [投稿フォーマット: 画像(リンク)] => stdClass Object ( [post_title] => 投稿フォーマット: 画像(リンク) ) [投稿フォーマット: オーディオ] => stdClass Object ( [post_title] => 投稿フォーマット: オーディオ ) [投稿フォーマット: 画像] => stdClass Object ( [post_title] => 投稿フォーマット: 画像 ) [投稿フォーマット: 画像(キャプション)] => stdClass Object ( [post_title] => 投稿フォーマット: 画像(キャプション) ) [] => stdClass Object ( [post_title] => ) [極端な例: コンテンツのない投稿] => stdClass Object ( [post_title] => 極端な例: コンテンツのない投稿 ) [Pneumonoultramicroscopicsilicovolcanoconiosis] => stdClass Object ( [post_title] => Pneumonoultramicroscopicsilicovolcanoconiosis ) )

配列についての詳細はこちら▼

PHP: 配列 - Manual

SQLインジェクション

データベースの取得をする時は、「SQLインジェクション」に注意する必要があります。

SQLインジェクション(英: SQL Injection)とは、アプリケーションのセキュリティ上の不備を意図的に利用し、アプリケーションが想定しないSQL文を実行させることにより、データベースシステムを不正に操作する攻撃方法のこと。

https://ja.wikipedia.org/wiki/SQL%E3%82%A4%E3%83%B3%E3%82%B8%E3%82%A7%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3#:~:text=SQL%E3%82%A4%E3%83%B3%E3%82%B8%E3%82%A7%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%EF%BC%88%E8%8B%B1%3A%20SQL%20Injection,%E6%80%A7%E3%81%AE%E3%81%93%E3%81%A8%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82

今回は、ユーザーさんに検索をしてもらうという操作は無いので触れていませんが、注意して抑えておいた方がよさそうです。次回以降で、また詳しく書いていきたいと思います。

まとめ

$wpdbクラスを使うことで、ワードプレスのデータベースのレコードや値を参照することが簡単にできるようになっています。便利なクラスですので、ぜひ活用してみましょう。

ご参考ください😃

URLをコピーしました!