WordPress操作$wpdb的工作或执行流

时间:2013-12-27 作者:chabi

我读过关于覆盖全局变量的内容$wpdb 并通过这种方式连接到第二个数据库(Search another database with wp_query using new wpdb ) 例如,可以在第二个DB上使用WP\\U查询。之后,将使用$wpdb\\u backup“还原”$wpdb。

参见以下代码@Tom J Nowell

global $wpdb;
// backup wpdb
$wpdb_backup = $wpdb;

// new db
$newdb = new wpdb($user, $password, $db, $host);

// pretend newdb is actually wpdb
$wpdb = $newdb;

// do stuff

// reset wpdb back
$wpdb = $wpdb_backup;
这是一个理论问题,可能与挂钩无关,只关注执行流。PHP(或通常的WP引擎)是否将主要执行并完成此脚本部分,其中$wpdb\'参数设置为第二个数据库的连接详细信息,在第二个数据库上执行操作后,它是否会在第二个网站访问者在$wpdb更改(或任何其他可能的操作处理DB1)之前单击帖子链接之前切换回旧的$wpdb($wpdb\\u备份),并且PHP会在$wpdb更改为$newdb后做出反应?

如果是这样的话,在这个场景中,WP显示一篇来自DB2的文章,尽管访问者希望(可能不是他,而是WP)来自DB1的某篇文章。如果DB2中不存在这样的post,则WP会抛出一个错误。

我错了吗?谢谢你的解释。

edit 是关于挂钩的优先权吗?

我知道有add_action ( \'hook_name\', \'your_function_name\', [priority], [accepted_args] ); 用于挂钩优先级。

<小时>edit2 简短的问题:WP是一个接一个地执行一个操作,还是同时处理它们(这样在操纵$wpdb时可能会发生冲突,并且在做了一些事情后将其更改回来)?

1 个回复
最合适的回答,由SO网友:Rarst 整理而成

我不确定我是否正确理解了您的问题,但您似乎有点误解了PHP请求通常是如何执行的。

$wpdb 不是持久的,它属于特定的页面加载,并且仅在执行该页面加载时存在。除非您的代码总是更改,否则独立的第二个(第三个等)页面加载将有自己的数据库连接实例。

这同样适用于操作——它们是在特定页面加载的上下文中执行的,而不是以任何全局持久方式执行的。

结束

相关推荐

在WordPress更新到3.5+后,我在插件wpdb::Prepare()中收到许多错误

在wordpress更新到3.5以上版本后,我在这个插件中发现了许多错误。我发现原因是:http://make.wordpress.org/core/2012/12/12/php-warning-missing-argument-2-for-wpdb-prepare/我不知道如何修理它。如果有人能帮我解决这些问题,或者给我一个如何解决的例子。这是插件核心文件http://pastebin.com/Tk5Gf1HRWordPress database error You have an error in y