2012-10-30 42 views
0

我已經爲我的wordpress(v3.4.2)網站手動創建了自定義表sdp_invites。我已經做了,在過去很多次,但現在我無法使用任何的$wpdb方法:未確認Wordpress自定義數據庫表

global $wpdb; 
global $current_user; 

$query = "INSERT INTO spd_invites (sender_id,receiver_id,job_id,job_title,job_slug,employer_id) VALUES ('{$current_user->ID}','{$resume->user_id}','{$job_id}','{$job_title}','{$job_slug}','{$employer_id}')"; 

$wpdb->get_results($query); //ERROR... 
$wpdb->query($query); //ERROR... 

這裏的錯誤:

WordPress database error: [Table 'sow2.spd_invites' doesn't exist] 
INSERT INTO spd_invites (sender_id,receiver_id,job_id,job_title,job_slug,employer_id) VALUES ('799','809','6','Professional Basket Weaver','professional-basket-weaver','5') 

我知道表存在,因爲我手動創建它,我可以在phpMyAdmin中看到它。任何想法,爲什麼我得到這個錯誤?

更新: WP用戶被稱爲「根」(在我的本地開發設置)。下面是在phpMyAdmin列出的權限:

User Host    Type Privileges Grant Action 
root localhost global ALL PRIVILEGES Yes  

UPDATE2: 只是排除了一堆的可能性,我想一個簡單的查詢:"SELECT * FROM sdp_invites"。這會引發相同的錯誤。當我改變到一個WP核心表,它的工作原理沒有錯誤"SELECT * FROM sdp_invites"

+1

是正確數據庫中選擇? – jtheman

+0

只做一個選擇的表會拋出相同的錯誤? –

+0

是的。 sow2是正確的DB。而網站上的其他所有內容都在工作。 – emersonthis

回答

2

我最好的猜測是你沒有授予你Wordpress MySQL數據庫用戶爲你的新的自定義表,大概是因爲你創建它與一個不同的MySQL用戶通過phpMyAdmin。試試運行:

GRANT ALL PRIVILEGES ON sow2.spd_invites TO 'wordpress_user'@'wordpress_host'; 
FLUSH PRIVILEGES; -- load new privileges 

替換「wordpress_user」與WordPress的MySQL用戶名(可在wp-config.php找到)和「wordpress_host」你的WordPress服務器的主機名(或本地主機,如果是在同一臺服務器上)。

請記住,這將允許WordPress的MySQL的完全權限(SELECTINSERTDROP等),以該表,這可能是不理想。查看MySQL的文檔我的GRANT命令信息 - http://dev.mysql.com/doc/refman/5.5/en/grant.html

您將要使用query()功能來運行您的插入,因爲它不會返回任何結果:

$wpdb->query($query); 

要查看可見的所有表您的WordPress的MySQL用戶,以下內容添加到你的主題functions.php文件在每一頁的底部打印出表名:

function show_all_tables(){ 
    global $wpdb; 
    foreach($wpdb->get_results("SHOW TABLES", ARRAY_N) as $table): 
     echo $table[0]."<br/>"; 
    endforeach; 
} 
add_action('wp_footer', 'show_all_tables'); 
+0

有沒有一種簡單的方法可以找出什麼'wordpress_user'@'wordpress_host'應該是我的具體實例? – emersonthis

+0

檢查你的'wp-config.php' – doublesharp

+0

或者你有phpmyadmin訪問權限,那裏有一個名爲privilegdes的選項卡,所有用戶都在那裏列出 –