2012-10-30 25 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的选项卡,所有用户都在那里列出 –