WordPress建立数据表函数dbDelta与maybe_create_table对比

WordPress插件开发或者主题高级功能定制过程中,常常需要新建数据表以操作数据库并与WP默认的表区分开来,那么需要用到dbDeltamaybe_create_table这两种函数。它们之间有一定的区别,现比较如下:

1.用法对比

dbDelta($queries,$execute = true)

参数:

$queries

为SQL查询语句

$execute

 

使用dbDelta创建数据表最好先判断是否存在该表

示例:

global $wpdb;     $table_name = $wpdb->prefix . 'tin_meta';        if( $wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name ) :    		$sql = " CREATE TABLE `$table_name` ( 			`meta_id` int NOT NULL AUTO_INCREMENT,  			PRIMARY KEY(meta_id), 			`user_id` int, 			`meta_key` tinytext, 			`meta_value` longtext 		) ENGINE = MyISAM CHARSET=utf8;"; 			require_once(ABSPATH . 'wp-admin/includes/upgrade.php');    			dbDelta($sql);        endif;

maybe_create_table( string $table_name, string $create_ddl)

参数:

$table_name

要创建的数据表名

$create_ddl

SQL语句.

示例:

global $wpdb; 		include_once(ABSPATH.'/wp-admin/upgrade-functions.php'); 		include_once(ABSPATH.'/wp-admin/includes/upgrade.php'); 		$prefix = $wpdb->prefix; 		$tpay_download = $prefix.'tpay_download'; 		$create_tpay_download_sql = "CREATE TABLE $tpay_download (tpay_id int(11) NOT NULL auto_increment,tpay_num int(11) NOT NULL,tpay_title varchar(100) NOT NULL,tpay_post int(11) NOT NULL,tpay_price double(10,2) NOT NULL,tpay_url varchar(32) NOT NULL,tpay_user_id int(11) NOT NULL,tpay_time datetime NOT NULL,tpay_data text NOT NULL ,tpay_success int(11) NOT NULL,tpay_author int(11) NOT NULL,PRIMARY KEY (tpay_id)) $table_charset;"; 		maybe_create_table($tpay_download,$create_tpay_download_sql); 

使用maybe_create_table会判断数据表是否存在,存在则不创建数据表

2.功用对比

dbDelta提供数据表功能性升级支持,特别是你的主题或插件升级,需要修改数据表结构,那么dbDelta是最好的方法,如果使用maybe_create_table,则有可能无法正确升级。所以如果你创建的数据表在未来版本可能会随着功能增多需要调整结构,那么dbDelta无疑是最好的方法。