简而言之,是的-$wpdb
班See Codex 了解更多信息。
无论何时与自定义表(或任何表)交互,都应该$wpdb
- 尤其要确保您熟悉prepare
方法,该方法可以帮助转义查询并防止注入。
您应该已经熟悉了,因为您应该使用它来创建表。在安装挂钩上,您应该有如下内容:
$charset_collate = \'\';
if ( ! empty($wpdb->charset) )
$charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
if ( ! empty($wpdb->collate) )
$charset_collate .= " COLLATE $wpdb->collate";
//Create custom table
$sql_custom_table ="CREATE TABLE {$wpdb->prefix}my_table (
id bigint(20) unsigned NOT NULL auto_increment,
column_a varchar(255) default NULL,
column_b varchar(255) default NULL,
PRIMARY KEY (id)
) $charset_collate; ";
require_once(ABSPATH . \'wp-admin/includes/upgrade.php\');
dbDelta($sql_custom_table);
该代码实际上在插件激活时运行(即不仅仅是安装)。因此,当有人自动更新插件时,它将运行。
Note: 如果他们通过手动更换插件进行升级,那么它不会升级,因此您需要在
admin_init
升级插件时(将版本号存储在选项表中,对照当前版本进行检查)
现在你通常不会想要CREATE TABLE
每次更新插件时都要运行的SQL命令-这是dBDelta()
进来了。
在运行上述命令之前,它会检查表是否存在。此外,它还检查列类型。因此,如果表不存在,它会创建它,如果存在,但某些列类型已更改,它会更新它们,如果列不存在,它会添加它。
不幸的是,如果您从上面删除一列,它不会自动删除该列。要删除列/表,您需要特别DROP
它们(先检查它们是否存在)。