Wordpress 多用户、自定义数据库、使用全局 wpdb 时潜在的并发问题

Posted

技术标签:

【中文标题】Wordpress 多用户、自定义数据库、使用全局 wpdb 时潜在的并发问题【英文标题】:Wordpress multi-user, custom database, potential concurrency problems when using global wpdb 【发布时间】:2015-06-24 08:33:15 【问题描述】:

我正在开发一个 Wordpress 网站,该网站将处理用户注册、朋友、团队和足球锦标赛括号。

在这个网站上,我有 wordpress 核心数据库和一些我自己制作的自定义非 wordpress 表。

我想使用 Wordpress 全局 $wpdb 变量在我的自定义表上发出 CRUD 请求。

问题:

当多个用户同时使用 $wpdb 变量时,我会遇到并发问题吗?

例子:

有 10 个用户在线,每个用户都对 sql_tournament 表进行 INSERT 调用。 $wpdb 上的 INSERT 命令在成功执行后会填充 $wpdb->insert_id 变量。每个用户的 INSERT 请求会为每个人(又名全局)更改 $wpdb->insert_id 变量,还是每个人都有一个单独的 $wpdb 实例,使其使用安全,因为我可以安全地假设在检索 $wpdb->insert_id 时变量,我会得到同一个Session插入的表的ID。

代码示例:

function team_add( $name, $team_website = '', $team_logo_url = '' )

    global $wpdb;

    $return = $wpdb->insert( DB_TEAM,
        array(
            'name'          => $name,
            'team_website'  => $team_website,
            'team_logo_url' => $team_logo_url
        ),
        array(
            '%s',
            '%s',
            '%s'
        )
    );

    if ( $return === false ) 
        throw new Exception( "Could not add team.." );
    

    return $wpdb->insert_id;

【问题讨论】:

【参考方案1】:

应该没有问题。

每个用户请求都被单独解释 - 单独的请求之间不会传递任何内容。

【讨论】:

【参考方案2】:

最后我会说,我使用了基于 Wordpress 安装的 Propel 2.0 ORM 来处理数据库请求,它运行得非常好。

它无疑减少了开发时间,并使调试和维护代码变得非常容易。

我能说的唯一缺点是,Propel 2.0 的在线文档很少,所以你必须对 SQL 和编程有一定的了解,这样你才不会卡住!

【讨论】:

以上是关于Wordpress 多用户、自定义数据库、使用全局 wpdb 时潜在的并发问题的主要内容,如果未能解决你的问题,请参考以下文章

markdown 在wordpress中创建和使用自定义全局变量。

使用属性值为我的 wordpress 库中的每个图像添加自定义链接

php WordPress插件,用于为WP多站点按站点存储自定义和内置用户字段。适合多语言设置。自定义为y

php Wordpress Bootstrap 4.1分页(使用自定义WP_Query()和全局$ wp_query支持)

php Wordpress Bootstrap 4.1分页(使用自定义WP_Query()和全局$ wp_query支持)

如何在 WordPress 插件安装中创建 MySql 用户自定义函数?