我试图以编程方式从数据库中删除记录。当我像这样硬编码时它确实从数据库中删除了一条记录:
$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'));
为什么使用变量的动态代码不起作用,我该如何解决?
答案 0 :(得分:1)
这就是我建议的方式:
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注入并安全地删除您的记录,如果失败则会返回错误消息:)
答案 1 :(得分:0)
我试过这样,它为我工作。
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()方法打印错误。
答案 2 :(得分:-1)
请使用下面的代码,我认为它会起作用。
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)"));
}