在WordPress中删除自定义表中的数据

时间:2015-06-20 作者:user3463054

我试图从自定义表中删除记录,但它不会删除任何内容。

这是我的代码:

<?php
global $wpdb;
$retrieve_data = $wpdb->get_results( "SELECT * FROM wp_paypal" );

// some code to display here...

?>
<form method="post" enctype="multipart/form-data">
   <td><input type="submit"  name="delete" value="Delete"  /></td>
</form>
<?php
$myid= $retrieved_data->id;

if (isset($_POST[\'delete\'])) {
        //global $wpdb;
        $wpdb->query(
              \'DELETE  FROM $wpdb->paypal
               WHERE id = "\'.$myid.\'"
              \'
        );

    }
}

2 个回复
SO网友:Domain

尝试使用$wpdb->prefix 代替$wpdb 在删除查询中。

示例:

 $wpdb->query(
              \'DELETE  FROM \'.$wpdb->prefix.\'paypal
               WHERE id = "\'.$myid.\'"\'
);

SO网友:Maxime

我知道我迟到了。。。但你问题的主要问题是,你在陈述中使用了单引号(\'):

$wpdb->query(
      \'DELETE  FROM $wpdb->paypal
       WHERE id = "\'.$myid.\'"
      \'
);
这意味着$wpdb->paypal 没有产生您期望的结果。首先,假设显示“paypal”表名。但事实并非如此。

如果$myid 值为4, PHP代码将生成以下SQL语句:

DELETE FROM $wpdb->paypal WHERE id = 4
。。。而不是:

DELETE FROM wp_paypal WHERE id = 4
要解决此问题,您必须:

将单引号更改为双引号。(Read why)

$table_name = $wpdb->prefix . \'paypal\';
$wpdb->query( "DELETE  FROM {$table_name} WHERE id = \'{$myid}\'" );
另外,确保you sanitize 这个$myid 变量,因为如果我提交值0 OR 1=1, 这将生成以下SQL语句:

DELETE FROM wp_paypal WHERE id = 0 OR 1=1
。。。并将删除表中的每一行

结束

相关推荐

按数组wp_Query的顺序显示特定帖子

我在带有wp\\U查询的自定义模板中显示了一些特定的帖子ID。我正在努力找出如何使这些有序。我想先显示1682,最后显示1540。它们不会以这种方式显示,“orderby”=>$successful\\u musics\\u array对我不起作用。如何才能做到这一点? <?php $successful_musics_array = array(\'1682\', \'1684\', \'556\', \'1793\', \'558\', \'1788