1. ホーム
  2. php

[解決済み] Wordpressのwpdb->deleteの問題

2022-02-26 02:28:07

質問

プログラムによってデータベースからレコードを削除しようとしています。このようにハードコードすると、データベースからレコードが削除されます。

$wpdb->delete( $table_name, array( 'user_id' => 1, 'timeMin' => 10), array('%d', '%d') );

ところが、それを変数を使ってダイナミックにやろうとすると、うまくいかないのです。変数をキャストして int を使用して、正しい型であることを確認します。

$id = (int) wp_get_current_user()->ID;
$time = (int) $_POST['umjp_time'];

$wpdb->delete( $table_name, array( 'user_id' => $id, 'timeMin' => $time), array('%d','%d'));

変数を使ったダイナミックコードがうまくいかない理由とその解決方法を教えてください。

解決方法は?

というのが、私のお勧めする方法です。

function vendor_module_remove_dealer($data)
{
    global $wpdb;

    $sql = 'DELETE FROM `'. $wpdb->prefix .'my_table` WHERE `primary_id` = %d;';

    try {
        $wpdb->query($wpdb->prepare($sql, array($data['primary-id'])));

        return true;
    } catch (Exception $e) {
        return 'Error! '. $wpdb->last_error;
    }
}

これでSQLインジェクションを防ぎ、安全にレコードを削除することができます。もし失敗したらエラーメッセージが返されます :)