【问题标题】:Wordpress custom database table not recognizedWordpress 自定义数据库表无法识别
【发布时间】:2012-10-30 21:01:24
【问题描述】:

我为我的 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    

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

【问题讨论】:

  • 是否选择了正确的数据库?
  • 只选择该表会引发同样的错误吗?
  • 是的。 sow2 是正确的数据库。网站上的其他一切都在正常工作。
  • 如果您选择了正确的架构,这肯定可以工作 - wordpress 和您的自定义表在同一架构中吗?
  • @rsz 除非你使用$wpdb->prefix,否则它不会那样做

标签: php mysql wordpress


【解决方案1】:

我最好的猜测是您没有为您的 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 命令的信息,请参阅 MySQL 文档 - 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');

【讨论】:

  • 有没有一种简单的方法可以确定我的特定实例的 'wordpress_user'@'wordpress_host' 应该是什么?
  • 或者因为你有 phpmyadmin 访问权限,所以有一个名为 privilegdes 的选项卡,所有用户都列在那里
  • 试过了。 SQL 查询成功。但是当我重新加载页面时,我得到了同样的错误。
  • @MrD 好点,选择架构后,您可以选择权限选项卡,然后从那里编辑权限 - 这是确保您编辑与您相同的 user@host 的好方法用于登录
  • 我也仔细检查了一遍,所有权限都授予了 wp 用户。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-21
  • 1970-01-01
  • 1970-01-01
  • 2014-09-20
  • 2019-08-27
相关资源
最近更新 更多