【问题标题】:Getting Fatal Error in get_results of WordPress在 WordPress 的 get_results 中出现致命错误
【发布时间】:2013-05-27 13:22:15
【问题描述】:
<?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() 我该如何克服这个问题。

【问题讨论】:

  • 尝试在全局 $wpdb 上方添加require_once( ABSPATH . 'wp-load.php' );

标签: php wordpress


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢@golddc 我是新手,如果有的话,您可以提供示例代码或链接
  • 我在写下我的答案后看到了@Rikesh 的评论。你可以试试他提供的代码——我也会做同样的事情。那么,以下内容仅供参考:你可以看一下你的WP文件夹下的index.php,你会发现它需要wp-blog-header.php。然后去 wp-blog-header.php ,它需要 wp-load.php ,这是 Rikesh 提到的。此文件在加载任何其他文件之前加载 - 您可以想象它的重要性。
【解决方案2】:

您不需要在查询 $wpdb-&gt; 中重新声明 wpdb,因为您已经在此行中声明了 $table_one = $wpdb-&gt;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";
        }
        }
            ?>

【讨论】:

【解决方案3】:
$query = $wpdb->query("SELECT * FROM $wpdb->$table_one WHERE confirm_code = $confirm");
$mylink = $wpdb->get_results($query);

【讨论】:

  • 你不是在这里调用同一个函数两次,一次是用 SQL 字符串,一次(大概)是用结果集吗?
猜你喜欢
  • 1970-01-01
  • 2012-08-05
  • 2012-01-27
  • 1970-01-01
  • 2017-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多