2016-01-04 74 views
0

我需要編寫一個查詢,它將連接2個表,然後返回一個值。其中一個表是wp_users。另一個是我製作的名爲wp_fd_braintree_users的表格(我在前面加上了「wp_」,這意味着我可以使用$wpdb->prefix.對吧?)。該表將存儲另一個ID,該ID對於我的網站的每個用戶都是唯一的。我正在查詢我的MySQL表嗎?

我找不出什麼$wpdb->query()用於。食典委提到它,但我無法找到它在何處解釋它的用途。我也知道我需要使用$wpdb->prepare(),但我不明白如何編寫此函數的第二個參數。下面的代碼是怎麼看的?我甚至可以在自定義表上使用query()prepare()

<?php 

    $user_id = (need to find some function that returns the current user's ID...) 

    $query = $wpdb->query(prepare(

    " 
    SELECT 
     wp_fd_braintree_users.bt_id 

    FROM 
     wp_fd_braintree_users 
     INNER JOIN wp_users ON wp_fd_braintree_users.ID = wp_users.ID 

    WHERE 
     wp_users.ID = $user_id 
    " 

    )); 

?> 

回答

0

它只是運行你提供的sql查詢。請查閱wpdb class文檔瞭解更多詳情。 Prepare用於準備SQL語句,不能使用wpdb對象,因爲它們不是標準的PHP函數;他們是wordpress中WPDB類的成員。

這裏是正確的(如果$ user_id的可用於SQL注入):

<?php 
$query = $wpdb->query($wpdb->prepare("SELECT wp_fd_braintree_users.bt_id FROM 
     wp_fd_braintree_users INNER JOIN wp_users ON wp_fd_braintree_users.ID = wp_users.ID WHERE wp_users.ID = %d;", $user_id)); 
?> 

現在只要你$user_id = get_current_user_id();而言,我希望你不要太早調用這個函數。 wordpress文檔的意思是,如果您在init鉤子可用之前調用您的代碼,可能會導致問題,因爲此功能所需的必要數據尚未設置。大多數情況下,您可以在模板文件中自由使用它,但是如果您使用的是functions.php或其所需的任何文件,則應確保此函數不會過早調用。

+0

謝謝!特別是第二部分!真的把事情弄清楚了! – whatwhatwhat

+0

:-)不客氣 – LIMEXS

0

要獲得電流/登錄用戶ID

$user_id = get_current_user_id(); 
+0

啊,是的,我剛剛在Google上偶然發現了這個。但是,它表示我需要[使用諸如'init'之類的動作鉤來調用這個函數,否則就會發生壞事。](https://codex.wordpress.org/Function_Reference/get_current_user_id)您是否同意這一點還是我可以像上面那樣簡單地使用它? – whatwhatwhat

+0

@whatwhatwhat [閱讀此](https://codex.wordpress.org/Function_Reference/get_current_user_id) –

+0

是的,這就是我所鏈接的。它說在init鉤子上使用它。 – whatwhatwhat

0

但是,如果你沒有一個數據庫中已經設置你會做

SELECT database_name.bt_id FROM table name... 

這可能是一個錯誤做出貢獻。然後將該代碼插入函數中,並將人員姓名電子郵件或任何其他函數設置爲函數的參數部分,讓函數返回$ wpdb變量,並返回從數據庫中檢索的值。

+0

如果我簡單地用另一個ID更新'wp_users'表,它會更容易嗎?或者我們可以不添加新的字段來建立在Wordpress表格中? – whatwhatwhat

+0

我不確定。我從來沒有使用Wordpress。我自己主持LAMP。也許他們有技術支持或什麼的。我認爲你應該能夠。您可能必須創建並使用相同名稱創建新表,或者在使用新字段創建新表之後更改代碼。 –