2012-09-14 80 views
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變量,並且這個函數在頁面模板文件中工作得很好。如果我的功能不是在這個地方散佈的,並且在某種集中式文件中,我只會更喜歡它。

感謝您的期待! :)

回答

2

「全球化」已經在全球範圍內的變量什麼也不做。案例和要點:

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關鍵字不會永久性地將定義的變量global設爲範圍。把它看作是一種在函數中定義變量的方法,並將其值設置爲任何具有相同名稱的變量都在函數之外。

您需要將您的全局聲明INTO功能,使在該函數的範圍內提供全球範圍的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(); 
} 
+1

哇。現在我覺得很笨!謝謝maiorano84。 :D – mrbubbles

+0

隨時。我已經爲全局變量添加了更深入的解釋。他們在Wordpress中使用相當多,但我建議不要使用它們,除非在標準實踐中絕對必要。如果這解決了您的問題,請將其標記爲已回答。 – maiorano84

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 

它不工作,但在添加行 全球$ wpdb在函數的開頭幫助我和查詢運行良好。 謝謝

相關問題