Wordpress自定义数据库表无法识别

时间:2012-10-30 21:01:25

标签: php mysql wordpress

我为wordpress(v3.4.2)网站手动创建了一个自定义表sdp_invites。我过去曾多次这样做,但现在我无法使用任何$wpdb方法:

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用户被称为“root”(在我的本地开发设置上)。这是phpMyAdmin中列出的权限:

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

UPDATE2: 为了排除一堆可能性,我尝试了一个更简单的查询:"SELECT * FROM sdp_invites"。这会引发同样的错误。当我更改为wp核心表时,它可以正常工作"SELECT * FROM sdp_invites"

1 个答案:

答案 0 :(得分:2)

我最好的猜测是你没有为你的新自定义表授予Wordpress MySQL数据库用户权限,大概是因为你是通过phpMyAdmin用不同的MySQL用户创建的。尝试运行:

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服务器的主机名(如果它位于同一服务器上,则替换为localhost)。

请记住,这将允许Wordpress MySQL完全权限(SELECTINSERTDROP等)到此表,这可能是不可取的。有关GRANT命令 - http://dev.mysql.com/doc/refman/5.5/en/grant.html

的信息,请参阅MySQL文档

您需要使用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');