<?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() 我怎样才能克服这个问题。
答案 0 :(得分:1)
错误看起来像wpdb的对象尚未实例化。
通常,在实例化对象之后,如果该方法不是静态方法,则应调用类的方法。否则会出现此错误。
我会检查代码的其他部分或文件,看它是否在WP代码之前执行。
例如,如果文件不是插件或主题(这意味着文件独立)并且在执行此文件之前您没有正确调用WP框架头文件,则$ wpdb对象可能尚未实例化。我肯定会在你的问题的评论中尝试@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";
}
}
?>