WordPressでQueryをゴリゴリ操作 wpdbまとめ ITかあさん

ITかあさん

WordPressでQueryをゴリゴリ操作 wpdbまとめ

みんなー!WordPressでSQLゴリゴリ書いてるかーい!

wordpressQuery

しーーん

ここ半年ほどITかあさんはWordPressでQueryをゴリゴリ書いてます。
今更ながら

お!wpdbすごいぞ!SELECT文 UPDATEを直接書くよりも楽!

と驚きまして、せっかくなので

すごいぞ!今すぐ使えるwpdb

をまとめたいと思います。
なお、基本的にこの記事はCodex:Class Reference/wpdbに書いてある内容とそれほど変わらないので、そちらを見て頂いても大丈夫です。

プリペアドステートメント

SQLをゴリゴリ書く前にwpdbでqueryを書く際で最も重要なプリペアドステートメントについてです。
(プリペアドステートメントと聞いて全くピンと来ない人はブラウザをそっと閉じてください。そんな人はまだSQL書いてはいけません。ヤケドを負います。負傷します。)

$wpdb->prepare(‘query’,$vaule1,$vaule2…)

$prepared_sql = $wpdb->prepare(

INSERT INTO $wpdb->postmeta
( post_id, meta_key, meta_value )
VALUES ( %d, %s, %s )
“,
10,
$metakey,

$metavalue
);

プリペアドステートメントはこんな感じで、$prepared_sqlにプリペアドステートメント化されたSQLが入ります。

  • %d … int型
  • %s … text型

上記$prepared_sql(プリペアステートメントをセットした状態のSQL)をver_dumpで確認するとこんな感じ。

INSERT INTO wp_postmeta
( post_id, meta_key, meta_value )
VALUES ( 10, ‘meta_key’, ‘meta_value’ )

text型ならセットした変数の部分がコロンで囲われます。
mysqli_prepare() なんかと考え方は一緒ですね。

SELECT文

複数件取得

$myrows = $wpdb->get_results( "
        SELECT * FROM $wpdb->users
        " );

これだとwp_usersテーブルに存在するデータ全件取得してしまうのでプリペアドステートメントを使って条件指定をするならこんな感じ。

$prepared_sql = $wpdb->prepare( ”
SELECT *
FROM $wpdb->users
WHERE status = %d
“,
0
);

$wpdb->get_results($prepared_sql);
※statusが0のデータをwp_usersテーブルから全件取得

1件だけ取得

戻りが複数件ではなく、1件しか無い時は、get_rowが使えます。

$prepared_sql = $wpdb->prepare( ”
SELECT *
FROM $wpdb->users
WHERE ID = %d
“,
1
);
$wpdb->get_row($prepared_sql);

※user_idが1のユーザーを取得

特定のフィールドだけを指定して取得

get_rowもget_resultも、先ほどは行全体を取得していましたが、IDだけ!titleだけ!とか、特定のフィールドだけを指定して取得することもできます。

$prepared_sql = $wpdb->prepare( ”
SELECT ID
FROM $wpdb->users
WHERE user_login = %s
“,
‘hoge’
);
$wpdb->get_col($prepared_sql);

user_loginフィールド hoge のIDを取得

データの登録・削除・更新

今までINSERTやUPDATE文をSQL書いていただけだったんですが、ちゃんとupdateやdeleteに便利な関数が用意されていたんですね。ちょっとFWのような立ち居振る舞いに感激しました

INSERT

行のINSERTにも基本のフォーマットがあります

$wpdb->insert(
‘table’,
array(
‘column1’ => ‘value1’,
‘column2’ => 123
),
array(
‘%s’,
‘%d’
)
);

データの更新

global $wpdb;
//更新したい内容(post_statusを更新する)
$data = array(
‘post_status’ => $status,
);
//更新したい行の条件
$condition = array(
‘ID’ => $objct_id
);
$dataFormat = array(‘%s’);
$conditionsFormat = array(‘%d’);
$wpdb->update(‘wp_posts’, $data, $condition,$dataFormat,$conditionsFormat);

データの削除

これはとっても簡単

$wpdb->delete( ‘table’, array( ‘ID’ => 1 ), array( ‘%d’ ) );

以上です。UPDATEとDELETEがすごくフレームワークチックで大好き。functions.phpやプラグイン開発時に使って下さい。

初夏のJavaScript祭 in サーキュレーションビル ForPro