Php Wordpress wpdb->;删除问题

Php Wordpress wpdb->;删除问题,php,wordpress,Php,Wordpress,我试图以编程方式从数据库中删除一条记录。当我将其硬编码为这样时,它会从数据库中删除一条记录: $wpdb->delete( $table_name, array( 'user_id' => 1, 'timeMin' => 10), array('%d', '%d') ); 然而,当我尝试用变量的动态方式来实现它时,它不起作用。我甚至尝试将变量强制转换为int,以确保它们是正确的类型 $id = (int) wp_get_current_user()->ID; $time

我试图以编程方式从数据库中删除一条记录。当我将其硬编码为这样时,它会从数据库中删除一条记录:

$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'));

为什么使用变量的动态代码不起作用?我如何解决这个问题?

请使用下面的代码,我认为它会起作用

global $wpdb;

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

$table_name = $wpdb->prefix . 'table_name';
if (!empty($id)) 
{

  $wpdb->query($wpdb->prepare("DELETE FROM $table_name WHERE user_id IN($id)"));

}

我建议您这样做:

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注入并安全地删除您的记录,如果失败,将返回错误消息:)

我这样尝试过,它对我有效

global $wpdb;

$id = (int) wp_get_current_user()->ID;
$time = (int) '4';
$table_name = 'testtable';
$wpdb->show_errors(); 
$wpdb->delete( $table_name, array( 'user_id' => $id, 'timeMin' => $time), array('%d','%d'));
$wpdb->print_error();
您遇到了哪些错误?请您解释一下?
您可以使用show_errors()和print_error()方法打印错误。

为什么不直接使用
$wpdb->query($wpdb->prepare())
?我会试试,我认为这是推荐的方法,但它不适用于Wordpress。我发现他们的标准/最佳做法是避免hafafirst:一定要使用
$wpdb->delete
。它在幕后处理大量的
准备
,等等。第二:当你
var\u dump($id)
时你会得到什么?或者
var\u dump($time)
?问题几乎肯定与这些变量中的值有关。这对SQL注入是开放的:)应使用
prepare
methodCode仅答案无效。为什么这样做,而OP的代码不这样做?此外,这对SQL注入非常开放。不要发布对此类安全攻击开放的答案。很抱歉,缺少$wpdb->prepare,但现在我已经添加了。@raju_eww它仍然对SQL注入开放:)您需要了解如何使用
$wpdb->prepare
。您的代码中没有正确使用它。