$wpdb->query() の使い方|説明・引数・注意点

説明

$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

コメント

タイトルとURLをコピーしました