説明
$wpdb->query() は、INSERT・UPDATE・DELETEなど、任意のSQLを実行するメソッドです。
基本構文
$wpdb->query( string $query ): int|bool
引数
$query:SQL文
戻り値
影響を受けた行数。エラー時は false。
使い方(サンプル)
global $wpdb;
$wpdb->query(
$wpdb->prepare( "DELETE FROM {$wpdb->postmeta} WHERE meta_key = %s", 'old_key' )
);
注意点
- データを変更するSQLは影響が大きいため、実行前にバックアップを取ります。
- 値は必ず
prepare()を通します。 - 単純な挿入・更新・削除には
insert()、update()、delete()を使うと安全です。
実務での使いどころ
$wpdb->insert()などで書けない、複雑な更新・削除のSQLを実行するとき。- テーブルの作成や、変更のSQLを実行するとき。
よくあるミスと対処
- 変数を、直接SQLに入れている。SQLインジェクションの原因になる。
$wpdb->prepare()を使う。 - 戻り値の
0を、失敗と考える。0は、影響した行が、なかったことを示す。失敗は、false。 SELECTの結果を取得したいのに、使っている。取得には、get_results()などを使う。
NG例
$wpdb->query( "DELETE FROM {$wpdb->prefix}logs WHERE user_id = $user_id" ); // 変数を直接入れている
OK例
$result = $wpdb->query(
$wpdb->prepare( "DELETE FROM {$wpdb->prefix}logs WHERE user_id = %d", $user_id )
);
if ( false === $result ) {
// エラー
}
使い分け早見表
| やりたいこと | 使うもの |
|---|---|
| 複雑な更新・削除のSQLを実行 | $wpdb->query() |
| 1行の追加 | $wpdb->insert() |
| 結果を取得(複数行) | $wpdb->get_results() |
関連項目
$wpdb->prepare()、$wpdb->insert()、$wpdb->update()
公式リファレンス:wpdb::query() | Class method | WordPress Developer Resources

コメント