Answers:
考虑以下:
您的插件在wordpress网络上使用,该网络为每个站点使用不同的表前缀。您的插件可以在836个不同的站点上同时运行,所有站点都在同一数据库中。wp_385677_liveshoutbox
是一个非常合理的表名。
您的插件是由具有一定安全性概念的用户安装的,并且已更改表前缀以阻止试图注入select * from wp_users
系统的机器人。即使他们发现了新的漏洞,它也不起作用。
采用诸如对表名进行硬编码之类的快捷方式是启动和运行产品的好方法,但不是发布产品的好方法。在很短的时间内,该插件上会出现一堆“无效”的注释,在最坏的情况下,您将破坏别人的网站。
如果我有一个复杂的查询,并且不想处理编写上的'select foo from ' . $wpdb->prefix . '_mytable left join ' . $wpdb->prefix . '_mytablemeta on ' . $wpdb->prefix . '.ID = ' . $wpdb->prefix . '.meta_id ....
麻烦,可以使用替换器。例如:
$query = 'select foo from %table% left join %meta% on %table%.ID = %meta%.meta_id ... ';
$change = array (
'%table%' => $wpdb->prefix . '_mytable',
'%meta%' => $wpdb->prefix . '_mytablemeta'
);
$sql = str_replace( array_keys( $change ), array_values( $change ), $query );
$results = $wpdb->get_results( $sql );
WordPress在不断变化。今天的“可行”明天可能不可行。这就是为什么有API函数。WordPress开发人员将确保公共API行为是一致的(否则他们将贬低该功能)。如果您因为使用内部方法调用而开始使用内部方法,因为它会“更快”,它通常会再次咬住您。软件中真正的快捷键很少-它们只是将所需的工作从现在移到以后,并且像您的信用卡“以后”通常会花费更多。
$wpdb->prefix . "users"
将导致多站点安装中的表无效。那是因为它将db前缀附加到表上。但是,由于所有用户都是网络用户,因此多站点仅使用一个用户表。因此,如果查询涉及wp_users或wp_usermeta表,则必须分别使用$wpdb->users
或$wpdb->usermeta
。