ノベルティメディア

media

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

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

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

今日はですね、初心者さんから頑張って積み上げていって中級者になってきたエンジニアさん向けです。
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におけるデータベース操作の基本をご理解いただけた方は、ぜひ公式リファレンスを読む等していただいて、実践のコードを書いていただければと思います。

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

この記事をシェアする
橋本大地

橋本大地

Engineer

バックエンドを経てフロントエンドの世界へ 持ち前のポジティブさと細やかさでノベルティを救う☆ 元気の源は愛妻弁当! 乾電池を通勤カバンに常備しているのできっと電池で動いています。

Webプロモーション・業務改善は
ノベルティひとつで完結

はじめての依頼にも
全力でサポートさせていただきます

メールでのお問い合わせ

おすすめ記事/ PICKUP

    記事カテゴリー/ CATEGORY

      Webプロモーションや業務改善・DX化

      企業の課題はノベルティひとつで完結

      ホームページ制作などのWeb制作をはじめ、
      システム開発やマーケティング支援などワンストップで対応
      まずはお気軽にお問い合わせください

      お問い合わせ

      お電話またはメールでお気軽にお問い合わせください。