0
<?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() 我该如何克服这个问题。

4

3 回答 3

1

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

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

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

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

于 2013-05-27T13:45:50.253 回答
0
$query = $wpdb->query("SELECT * FROM $wpdb->$table_one WHERE confirm_code = $confirm");
$mylink = $wpdb->get_results($query);
于 2013-05-27T13:32:56.323 回答
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";
        }
        }
            ?>
于 2013-05-27T13:33:03.420 回答