我为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"
答案 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完全权限(SELECT
,INSERT
,DROP
等)到此表,这可能是不可取的。有关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');