在WordPress的get_results中出现致命错误

时间:2013-05-27 13:22:15

标签: php wordpress-plugin wordpress

<?php

if (isset($_GET['confirm_code'])) {
    __construct();
}

function __construct() {
    global $wpdb;
    $table_one = $wpdb->prefix . "fantasticemailnewsletter_temp";

    $confirm = $_GET['confirm_code'];
    $mylink = $wpdb->get_results("SELECT * FROM $wpdb->$table_one WHERE confirm_code = $confirm");
    if ($mylink) {
        echo $mylink->confirm_code;
        echo "success";
        echo $wpdb->show_error();
    } else {
        echo "You Subscription is not process right now please try again later";
    }
}

?>

我正在尝试在WordPress中创建一个简报插件。我为相应的订户建立了一个确认链接,以防止垃圾邮件发送者,为每个订阅电子邮件创建一个随机密钥。我通过邮件传递带有查询字符串的随机密钥,如下所示:

http://www.example.com/wp-content/plugins/plugininname/includes/subscriber.php?confirm_code=%2248c9c7d48165379b49f58962c0092466%22

仅在subscriber.php,我正在使用上述代码,但出于某种原因,get_results()处出现错误:

  

致命错误:在非对象上调用成员函数get_results()   我怎样才能克服这个问题。

3 个答案:

答案 0 :(得分:1)

错误看起来像wpdb的对象尚未实例化。

通常,在实例化对象之后,如果该方法不是静态方法,则应调用类的方法。否则会出现此错误。

我会检查代码的其他部分或文件,看它是否在WP代码之前执行。

例如,如果文件不是插件或主题(这意味着文件独立)并且在执行此文件之前您没有正确调用WP框架头文件,则$ w​​pdb对象可能尚未实例化。我肯定会在你的问题的评论中尝试@Rikesh的代码。

答案 1 :(得分:0)

$query = $wpdb->query("SELECT * FROM $wpdb->$table_one WHERE confirm_code = $confirm");
$mylink = $wpdb->get_results($query);

答案 2 :(得分:0)

您不需要在查询$wpdb->中重新声明wpdb,因为您已在此行$table_one = $wpdb->prefix . "fantasticemailnewsletter_temp";中声明了

    <?php 
   if(isset($_GET['confirm_code'])) {
__construct();
}
function __construct() {
global $wpdb;

        $confirm = $_GET['confirm_code'];
        $mylink = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}fantasticemailnewsletter_temp WHERE confirm_code = $confirm");
        if($mylink) {
        echo $mylink->confirm_code;
        echo "success";
        echo $wpdb->show_error();
        }
        else {
        echo "You Subscription is not process right now please try again later";
        }
        }
            ?>