【问题标题】:Error in php - Call to a member function get_results() on a non-objectphp 中的错误 - 在非对象上调用成员函数 get_results()
【发布时间】:2013-06-17 18:44:14
【问题描述】:

我有 wordpress 博客,并且在一些帖子下有大量的 cmets。我最近发现有些 cmets 重复了两三次。我想使用 php 代码从 Wordpress 的 mysql 数据库中删除表 wp_cmets 中的重复元素(通过在服务器上打开 php 文件)。我使用了这段代码:

<?php
include_once($_SERVER['DOCUMENT_ROOT'].'/wp-load.php' );
global $wpdb;

$comments = $wpdb->get_results("SELECT * FROM ".$wpdb->prefix."_comments"
   ." ORDER BY comment_post_ID, comment_content");

$prev = NULL;

foreach($comments as $comment) {

  if ($prev && $prev->comment_content == $comment->comment_content
    && $prev->comment_post_ID == $comment->comment_post_ID ) {

    $wpdb->query("DELETE FROM ".$wpdb->prefix."_comments WHERE comment_ID == ".$comment->comment_ID);

  }
  else
    $prev = $comment;
}
?>

我得到了这个错误:

*> 致命错误:在第 5 行的 .../cmetsremoving.php 中调用非对象的成员函数 get_results()*

更新:

感谢 Sheikh Heera,我现在没有错误消息,但我的代码不起作用 - 没有删除重复的 cmets。任何想法为什么?

【问题讨论】:

  • 您似乎没有在任何地方定义$wpdb...global 关键字在您提供的代码中没有任何意义。
  • var_dump $wpdb 变量请
  • 全局 $wpdb 变量是正确的,所以我猜你不需要 WordPress 的 wp-load.php 在这个文件的顶部,这是访问所有 WordPress 功能所必需的。

标签: php


【解决方案1】:

只要您想在WordPress 之外使用 WordPress 的功能,您都可以使用

include_once($_SERVER['DOCUMENT_ROOT'].'/wp-load.php' );

然后您就可以使用 WordPress 的功能了。 Check This.如果你只想访问数据库函数,那么

require_once( $_SERVER['DOCUMENT_ROOT'] . '/wp-config.php' );
require_once( $_SERVER['DOCUMENT_ROOT'] . '/wp-includes/wp-db.php' );
if (!$wpdb) {
    $wpdb = new wpdb( DB_USER, DB_PASSWORD, DB_NAME, DB_HOST);
} else {
    global $wpdb;
}

【讨论】:

  • 谢谢,有帮助!!我现在没有错误消息,但我的代码不起作用 - 没有删除重复的 cmets ;-/
【解决方案2】:

在您的代码中的第 5 行之后添加以下内容。脚本现在是否在页面中显示任何错误?

$wpdb->print_error(); 

【讨论】:

  • 现在我没有错误(即使使用 $wpdb->print_error(); 行)但我的代码不能正常工作。
  • 如果你把 $wpdb->print_error();在脚本的底部?就在收盘前?>
  • 没什么,加载这个文件后我有空白页。评论还在。
  • 你连接到数据库了吗?你看到了什么: echo mysql_error();在脚本的末尾。
  • 调试一下,输入 echo 'It works';在 if 语句中,就在您的 Delete 查询之前。然后至少当 if 语句找到重复项时,您至少会看到“It works”打印到屏幕上。应该为找到的每个重复项打印它。这只会告诉您 if 语句在 cmets 中查找重复项,并且可以让您将删除查询作为罪魁祸首缩小范围。如果您仍然无法让查询正常工作,您可以发布有关该查询的另一个问题。
【解决方案3】:

我猜你不需要这个文件顶部的 wp-load.php。要加载 WordPress 以便您可以使用其全局变量和函数,此文件是必需的。尝试将它放在文件顶部的全局变量之前:

require( '/path/to/wp-load.php' );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 2016-02-12
    • 2016-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多