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支持)