在Wordpress functions.php文件中使用$wpdb对象

在Wordpress functions.php文件中使用$wpdb对象,wordpress,Wordpress,我遇到了一个问题,无法在Wordpress functions.php文件中的$wpdb对象上调用get_results函数 确切错误:调用成员函数获取[…]中非对象的结果 这是我的职责 global $wpdb; function query_students($year){ $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}usermeta WHERE me

我遇到了一个问题,无法在Wordpress functions.php文件中的$wpdb对象上调用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变量,这个函数在页面模板文件中非常有效。我只是希望我的职能不是分散在这个地方,而是集中在某种文件中


期待您的光临!:

全局化已在全局范围内的变量不会产生任何效果。案例和要点:

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();
}

将已在全局范围内的变量全局化不会产生任何效果。案例和要点:

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();
}

我在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帮助了我,查询运行良好。
谢谢

我在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帮助了我,查询运行良好。
随时谢谢你。我为您添加了一个关于全局变量的更深入的解释。它们在Wordpress中被大量使用,但我建议不要使用它们,除非在标准实践中绝对必要。如果这解决了您的问题,请随时将此标记为已回答。我为您添加了一个关于全局变量的更深入的解释。它们在Wordpress中被大量使用,但我建议不要使用它们,除非在标准实践中绝对必要。如果这解决了您的问题,请将此标记为已回答。