2012-08-28 57 views
2

我在一個名爲「ihn_2_frm_item_metas」的WordPress多站點上有一個自定義WordPress表格,用於表單條目。

截圖數據庫表的是在這裏:https://www.dropbox.com/s/ex54qxxohkexg5t/mysql.png

現在,有兩個條目。每個條目都有自己獨特的「item_id」(在這種情況下,Bob Marley的條目的ID爲10,Molly Dolly的條目的ID爲9)。這些條目也對應於實際的WordPress用戶(他們的用戶名是他們的電子郵件地址,他們的密碼是「測試」)。條目ID與其WordPress用戶標識號不同。

我已經使用密碼「test」以「[email protected]」身份登錄。

在博客的主頁上,我希望僅顯示當前登錄用戶的「meta_value」列中的所有項目。

我想這樣做的兩個步驟:

  1. 找到在當前登錄用戶(「[email protected]」)的電子郵件地址。
  2. 找到位於匹配電子郵件地址的同一行上的該用戶的表單條目(10)的「item_id」。

下面是代碼我想出了:

global $wpdb; 
    global $current_user; 
    get_currentuserinfo(); 
    $email = $current_user->user_email; 

    $id = $wpdb->get_var(" SELECT item_id FROM ihn_2_frm_item_metas WHERE meta_value = $email "); 
    $client_meta = $wpdb->get_results(" SELECT * FROM ihn_2_frm_item_metas WHERE item_id = $id "); 

    echo '<p> $email is a ' . gettype($email) . '</p>'; 
    echo '<p> $id is a ' . gettype($id) . '</p>'; 
    echo '<p>The current logged in user is ' . $email . '.</p>'; 
    echo '<p>The current form entry id is ' . $id . '.</p>'; 
    echo "<ul>"; 

    foreach ($client_meta as $value) { 
     echo '<li>' . $value->meta_value . '</li>'; 
    } 

    echo "</ul>"; 

我只是在二階gettype()聲明,以確認我的兩個varables,$email$id是字符串。

這裏是我的代碼的輸出:

$電子郵件是一個字符串。

$ id是一個NULL。

當前登錄的用戶是[email protected]

當前表單條目標識爲。

請注意,$idNULL。是什麼讓我困惑的是,當我改變$id變量這(與「[email protected]」替換變量$email):

$id = $wpdb->get_var(" SELECT item_id FROM ihn_2_frm_item_metas WHERE meta_value = '[email protected]' "); 

我的輸出正是我需要的:

$郵件是一個字符串。

$ id是一個字符串。

當前登錄的用戶是[email protected]

當前表單條目標識爲10。

我在哪裏出了錯?

回答

2

您對$email省略單引號:

$id = $wpdb->get_var(" SELECT item_id FROM ihn_2_frm_item_metas WHERE meta_value = '$email' "); 
//---------------------------------------------------------------------------------^^^^^^^^ 

這將導致一個語法錯誤在查詢中。我不熟悉WordPress如何處理這些錯誤,但是它返回NULL不成功的查詢。

如果你並不需要真正瞭解的item_id除了在隨後的查詢中使用它的價值,我想你可以使用子查詢IN()這些合併成一個單一的語句:

$client_meta = $wpdb->get_results(" 
    SELECT * FROM ihn_2_frm_item_metas WHERE item_id IN (
    SELECT item_id FROM ihn_2_frm_item_metas WHERE meta_value = '$email' 
) 
"); 
+0

解決了問題完美。非常感謝你! – tatemz