千葉県船橋市のホームページ制作・マーケティングの株式会社ノベルティ

COLUMN

コラム

2022.05.10

データベース接続のキホン $wpdbの使い方!

橋本大地

php

みなさんこんにちは。エンジニアの橋本です。

今日はですね、初心者さんから頑張って積み上げていって中級者になってきたエンジニアさん向けです。
WordPressをしっかり操れるようになって、Wordpress内の関数にも慣れてくると、【開発をしたい!】というステップに進まれる方も多いのではないでしょうか。

具体的にはブロックエディターを独自のカスタマイズをしたい独自の予約システムを作ってみたい...などなど、私たちが使わせてもらっているプラグインを作ってみようということですね。

そこで欠かせないのがデータベースに対する様々な実行ですね。

情報を参照したり、挿入したり、更新したり、削除したり。これらは開発において欠かせない存在です。

今回はWordpressでデータベース接続する際に基本となる$wpdbについて解説させていただきたいと思います!

目次

$wpdbってなに?

こちらはWordpress様があらかじめ用意してくれている、グローバルオブジェクトです。

この中にはデータベースに対する様々な関数が定義されており、こちらを適切に用いることがWordpressにおいては最適解です。

データベースに対する実行行為は、大きく分けると参照、挿入、更新、削除です。これらがきちんとサポートされているので、セキュリティ面を考えても生のSQLを書くような形は避け、中の関数を利用することが推奨されています。

使い方キホン

$wpdbはグローバルのオブジェクトですので、使いたいシーンで下記の記述が必要になります。

global $wpdb;

素のphpでデータベース接続を学習済みの方は疑問に感じるかもしれませんが、煩わしいDBへの接続関数などを定義することは一切不要です。

データベースから情報を取得する

まず、情報の取得は基本ですね。
テーブル名の指定については、$wpdb->postsのような形でするとwp_postsという名称に変換されます。これはWordpressを初回インストールする際に接頭辞を決めたと思いますが、その文字列に変換される仕組みです。

$post_data = $wpdb->get_row("SELECT post_title FROM $wpdb->posts WHERE post_id = 9999");

上記のコードであれば、post_idが9999のposts_titleを取得します。

つまり、get_the_title(9999)のような形であるわけです。これでデータベースから好きな値を好きなように引っ張ってくることが可能になりました。

ただし、セキュリティの問題やエスケープしている文字列があるなど、必要な場合を除いて基本的にはWordPressの関数で取得できるもの(the_title()など)はこちらを利用しましょう!

取得方法イロイロ

取得の関数はさまざまあります。

用途によってきちんと使い分けていければよいですね。

  • 単一行の取得
    $wpdb->get_row
  • 複数行の取得
    $wpdb->get_results

また、get_resultsにつきましては、リターンされる値をオブジェクトか連想配列かで指定することも可能です。
第二引数にOBJECTもしくはARRAY_Aと指定すればOKなので、目的にあわせてきちんと指定しましょう。

登録・更新・削除も!

今回は参照をご紹介させていただきましたが、下記のようにデータベースに対してさまざまな操作が可能になります。

$wpdb->insert //挿入(登録) 
$wpdb->update //更新
$wpdb->delete //削除

基本操作さえ覚えれば、データベースを用いて情報を動的に記録し、目的の機能を実現することができるようになりますね。

SQLインジェクション対策もきちんと行おう!

こちらの項でご説明させていただきたいのは、セキュリティについてです。

これをやっておけば万事OKといった簡単なものではありませんが、SQLはデータベースに直接指示を出すものなので、間違えると不正なスクリプトを実行してしまう温床にもなります。

それを防止するために、クエリを保護する必要があります。そのために具体的には、実行する前にクエリをすべてエスケープしていきます。

このような方法はシステム開発においては基本的なところ。必須でおさえておきたいところですね。

$wpdb->query( $wpdb->prepare( 
	"
		INSERT INTO $wpdb->postmeta
		( post_id, meta_key, meta_value )
		VALUES ( %d, %s, %s )
	", 
        10, 
	$metakey, 
	$metavalue 
) );

上記ソースはリファレンスからの抜粋です。

カスタムフィールドなどで用いられるメタ情報の新規追加(挿入)を行っていますが、$wpdb->prepareを実行している点に注目です。

こちらは第一引数にクエリを、第二引数にパラメータを書きます。
パラメータの部分は、クエリで%dや%sと書いてある部分に置き換えられる仕組みます。最初に出てきた%dは10を、次の%sは$metakeyと言った具合です。

ポイントは、型を厳格に指定している点です。%dは整数型のみを許容するので、”hoge”と入力されていても無視されます。
また、スクリプトを埋め込まれていたとしても、エスケープされます。

データベースには整数や文字列、日時などさまざまな型が存在しており、これらの制御がかかっている点は意識してプログラミングすることが求められます。

まとめ

今回はウェブ制作にも慣れてきて、プラグイン開発や少し凝った独自機能を開発しようと考えていらっしゃる中級者向けの記事でした!

今回の内容でWordpressにおけるデータベース操作の基本をご理解いただけた方は、ぜひ公式リファレンスを読む等していただいて、実践のコードを書いていただければと思います。

開発の入り口になれれば幸いです。それではまた!

橋本大地

プロジェクトリーダー

バックエンドを経てフロントエンドの世界へ
持ち前のポジティブさと細やかさでノベルティを救う☆
元気の源は愛妻弁当!
自家用マシンでMacbookを購入することを夢見ています。
HOME | コラム | データベース接続のキホン $wpdbの使い方!
CONTACT

お問い合わせ

お見積りの依頼やWEBに関する
お悩みがございましたら、
お電話かメールからお問い合わせください。

047-405-2227

お電話対応可能時間 平日/10:00~17:00

〒273-0005 千葉県船橋市本町5-1-1 船橋AUビル4階

船橋情報配信メディア

トコトコふなばし船橋情報配信メディア|トコトコふなばし

【船橋トコトコ大冒険メディア】として船橋の地域情報メディア、トコトコふなばしを運営。

船橋の観光スポットやイベント、グルメなど船橋の魅力を、熱く!ディープに!紹介しています。

また、船橋で活躍されている個人・企業の皆様への取材も実施しています。

船橋情報配信メディア|トコトコふなばしのとこっとちゃん

トコトコふなばしのキャラクター

とこっとちゃん

船橋に迷い込んでから船橋が気に入ってしまったトコ!

船橋を散歩しながら船橋のいいトコを紹介しているトコ。

船橋市内での取材はボクも行くトコよ~♪