0

sdp_invites为我的 wordpress (v3.4.2) 站点手动创建了一个自定义表。我过去曾多次这样做,但现在我无法使用任何$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"

4

1 回答 1

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

请记住,这将允许 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');
于 2012-10-30T21:09:30.353 回答