wpdb (2)

この投稿は2年半前の記事です。 情報が古くなっている可能性があるので、その点ご了承ください。
2014 年 12 月 10 日 867日前)
2,422文字 (読了時間6分)

SPONSORED LINK

さて、前回は$wpdbを使ってSELECTなんちゃらというクエリを発行し、WordPressのデータを取得してみました。ある意味、あなたはMySQLの持つ4つの側面のうち一つを学んだということになります。

はて、4つとはなんでしょう。実はRDBMS(MySQLのようなリレーショナルデータベース管理システム)には、CRUDという言葉があります。

  1. 作成 (Create)
  2. 取得 (Retrieve)
  3. 更新 (Update)
  4. 削除 (Delete)

あなたが前回やったSELECTなんちゃらはこのうちのR(取得)に当たります。僕個人の感覚では、CRUDに割く労力は次のような感じです。

Create 10%
Retrieve 80%
Update 8%
Delete 2%

要するに、うんうん悩むのは取得の部分で、他はそんなに難しくないんですね。もちろん、バッチ処理でDeleteかけたらやたら遅くて1日たっても終わらないとかそういう苦労もあるにはあるのですが、やはり取得が一番悩みどころです。

逆に考えると、CUDに関してはちゃちゃっと終わらせてしまい、Rに割く労力を確保した方がいいですね。

では、早速やってみましょう。前回作ったwpdb-test.phpに追記していく形にします。本当はサンプルサイトをインストールしてどうこうとか考えていたんですが、若干酔っ払っていて辛いので。

1. データを追加してみよう

それでは、データを追加してみます。まず、どうでもいい投稿を1つ選び、その投稿のIDを突き止めてください。僕はとりあえずローカルにインストールされているWordPressの投稿を選んでみました。投稿IDは13640ですね。

投稿一覧でマウスオーバーするとIDが見える
投稿一覧でマウスオーバーするとIDが見える

それでは、この投稿にカスタムフィールドを追加してみましょう。カスタムフィールドはwp_postmetaというテーブルに保存されています。

wp_postmetaの構造

カスタムフィールドは重複を許すので、同じようなデータを追加できます。今回はmy_wpdbというキーで、「できた!」という値を追加してみましょう。

// カスタムフィールドを追加
// 前回やった通り、$wpdbにはデフォルトのテーブルが
// メンバー変数としてアサインされてます。
$result = $wpdb->insert( $wpdb->postmeta, array(
     'post_id' => 13640,
     'meta_key' => 'my_wpdb',
     'meta_value' => 'できた!',
), array('%d', '%s', '%s',) );
// 返り値を表示してみる
var_dump($result);

多分、画面には1と表示されたかと思います。

この1は何かというと、変更された行ですね。1行追加されたので1と返ってきているわけです。裏を返せば、データの作成に失敗すると0が返ってくるということですね。

さて、結果を見るために該当する投稿の編集画面を開いてみましょう。そうすると、カスタムフィールドに値が追加されているのがわかります。

保存されたカスタムフィールド

では、wpdb-test.phpを4回ぐらいリロードしてみてください。そうすると、カスタムフィールドがずらっと増えています。

リロードの回数だけカスタムフィールドが増える

insertメソッドは引数として、テーブル名、カラムと保存する値からなる配列、サニタイズ用の配列を取ります。二番目の配列はテーブル構造を照らし合わせてみると、「ああ、そういうことね」というのがわかりますね。無害化サニタイズ用の配列については、明日以降で説明するので、「そういうものがあるのだな」程度に思っていてください。

2. 投稿を更新

それでは、CRUDの3つ目、更新をやってみましょう。先ほどの投稿IDのタイトルを変更してみます。

// 投稿を更新
$result = $wpdb->update( $wpdb->posts, array(
     'post_title' => '更新されちゃった!',
), array(
     'ID' => 13640,
), array('%s'), array('%d') );

wpdb-test.phpを開いてみると、タイトルが変わっているのがわかるかと思います。

スクリーンショット 2014-12-10 1.17.54

どうでしょう、このupdateメソッドって、insertメソッドと似ていませんか? そうなんです。対して変わらないんですよ。

3. カスタムフィールドを削除

さて、先ほど追加したmy_wpdbというカスタムフィールドなのですが、特に使い道がないので削除してしまいましょう。

// どうでもいいカスタムフィールドを削除
$wpdb->delete( $wpdb->postmeta, array(
     'meta_key' => 'my_wpdb',
), array('%s'));

どうでしょう、投稿編集画面のカスタムフィールドから、さきほど追加した値が全部消えたんじゃないでしょうか。

まとめ

  • MySQLのようなデータベースにはCRUDという概念があり、あなたはそれを一通り試した

さて、一通りの機能はやってみましたが、まだまだ。バスケットボールで言えば、バッシュの履き方を覚えたようなものです。

次回はWordPressのテーブル構造を見ながら、目的とする機能を実現するためのデータベース構造設計を試みます。

 

フォローしてください

ここで会ったのもなにかの縁。
高橋文樹.comの最新情報を見逃さないためにもフォローをお願いします。
めったに送らないメルマガもあります。

SPONSORED LINK

この記事について

この記事はが2014 年 12 月 10 日にプログラミングの記事として公開しました。

高橋先生の電子書籍

高橋先生の電子書籍

Amazonで電子書籍も買えます。

好きな言葉

私にはポルノの定義はできないが、見ればわかる。

— ジャレド・ダイアモンド

高橋先生の処女作

『途中下車』高橋文樹

2001年幻冬舎NET学生文学大賞受賞作です。

Web制作やります

Web制作やります

Web制作のご依頼は株式会社破滅派へ

不定期メルマガ

高橋文樹.comでは、不定期でニュースレターを配信しています。滅多に送らないので是非購読してください。

高橋文樹.comではプライバシーポリシーに準じて登録情報を取り扱います。