0

我无法在 Wordpress functions.php 文件中的 $wpdb 对象上调用 get_results() 函数。

确切错误:在 [...] 中的非对象上调用成员函数 get_results()

这是我的功能;

global $wpdb;
function query_students($year){
   $wpdb->get_results(
      $wpdb->prepare(
         "SELECT * FROM {$wpdb->prefix}usermeta WHERE meta_key ='foobar' AND meta_value = '{$year}'"
      )
   );
$wpdb->flush();
}

如您所见,我已经对 $wpdb 变量进行了全球化,并且该函数在页面模板文件中运行良好。如果我的功能没有散布在这个地方,并且在某种集中式文件中,我会更喜欢它。

感谢期待!:)

4

2 回答 2

3

“全球化”一个已经在全局范围内的变量什么都不做。案例与要点:

global $a; //does nothing
$a = 'foo';
global $a; //does nothing
foo();
echo $a; //'foo'
bar();
echo $a; //'bar'
function foo()
{
    $a = 'bar';
}
function bar()
{
    global $a;
    $a = 'bar';
}

global 关键字不会永久使定义的变量在范围内成​​为全局变量。将其视为在函数中定义变量并将其值设置为函数外部具有相同名称的任何变量的一种方式。

您需要将全局声明移动到函数中,以使全局范围内的 $wpdb 对象在函数范围内可用:

function query_students($year){
    global $wpdb;
    $wpdb->get_results(
    $wpdb->prepare(
     "SELECT * FROM {$wpdb->prefix}usermeta WHERE meta_key ='foobar' AND meta_value = '{$year}'"
    ));
    $wpdb->flush();
}
于 2012-09-14T17:55:17.717 回答
0

我在functions.php中运行以下查询

SELECT `id`, `user`, `width`, `type`, `source`, `link`, `expire`, `impressions`, `clicks` FROM adds WHERE `width`=728 and `impressions` < (SELECT max(`impressions`) FROM adds WHERE `width`=728 ) or `width`=728 and `clicks` < (SELECT max(`clicks`) FROM adds WHERE `width`=728 ) ORDER BY RAND() LIMIT 3

它不起作用,但是在函数开头添加行 global $wpdb 后对我有帮助并且查询运行良好。谢谢

于 2013-09-16T12:44:38.223 回答