さて、前回は$wpdbを使ってSELECTなんちゃらというクエリを発行し、WordPressのデータを取得してみました。ある意味、あなたはMySQLの持つ4つの側面のうち一つを学んだということになります。
はて、4つとはなんでしょう。実はRDBMS(MySQLのようなリレーショナルデータベース管理システム)には、CRUDという言葉があります。
- 作成 (Create)
- 取得 (Retrieve)
- 更新 (Update)
- 削除 (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ですね。
それでは、この投稿にカスタムフィールドを追加してみましょう。カスタムフィールドは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を開いてみると、タイトルが変わっているのがわかるかと思います。
どうでしょう、このupdateメソッドって、insertメソッドと似ていませんか? そうなんです。対して変わらないんですよ。
3. カスタムフィールドを削除
さて、先ほど追加したmy_wpdbというカスタムフィールドなのですが、特に使い道がないので削除してしまいましょう。
// どうでもいいカスタムフィールドを削除 $wpdb->delete( $wpdb->postmeta, array( 'meta_key' => 'my_wpdb', ), array('%s'));
どうでしょう、投稿編集画面のカスタムフィールドから、さきほど追加した値が全部消えたんじゃないでしょうか。
まとめ
- MySQLのようなデータベースにはCRUDという概念があり、あなたはそれを一通り試した
さて、一通りの機能はやってみましたが、まだまだ。バスケットボールで言えば、バッシュの履き方を覚えたようなものです。
次回はWordPressのテーブル構造を見ながら、目的とする機能を実現するためのデータベース構造設計を試みます。