激活插件时,使用PHP在WordPress数据库中创建两个表

问题描述:

I am having a problem with my plugin that is suppose to create a table in the WordPress database when it is activated. My current code is as follows:

register_activation_hook(__FILE__, 'wp_table_install');

function wp_table_install(){
global $wpdb;
global $db_version;

$sql ="CREATE TABLE IF NOT EXISTS 'st_support_tickets'
('id' mediumint(8) unsigned NOT NULL auto_increment,
'ticket_id' varchar(36) NOT NULL,
'ticket_user_id' varchar(36) NOT NULL,
'ticket_description' TEXT default NULL,
'ticket_priority' varchar(255) default NULL,
'ticket_status' varchar(255) default NULL,
'ticket_type' varchar(255) default 'Private',
PRIMARY KEY ('id')) 
AUTO_INCREMENT=1;

CREATE TABLE IF NOT EXISTS 'st_support_priorities' 
('id' mediumint(8) unsigned NOT NULL auto_increment,
'ticket_user_id' varchar(36) NOT NULL,
PRIMARY KEY ('id'))
AUTO_INCREMENT=1;
";

require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
add_option("db_version", $db_version);
}

What is stopping these tables from being created? Is it the sql query or the syntax or what?

我的插件有问题,假设在激活时在WordPress数据库中创建一个表。 我当前的代码如下: p>

  register_activation_hook(__ FILE __,'wp_table_install'); 
 
function wp_table_install(){
global $ wpdb; 
global $ db_version; 
  
 $ sql =“CREATE TABLE IF NOT NOT EXISTS'st_support_tickets'
('id'mediaint(8)unsigned NOT NULL auto_increment,
'ticket_id'varchar(36)NOT NULL,
'ticket_user_id'varchar(36)  NOT NULL,
'ticket_description'TEXT默认为NULL,
'ticket_priority'varchar(255)默认为NULL,
'ticket_status'varchar(255)默认为NULL,
'ticket_type'varchar(255)默认为'Private',  
 
NIMIMARY KEY('id'))
 
AUTO_INCREMENT = 1; 
 
 
CREATE TABLE IF NOT NOT EXISTS'st_support_priorities'
('id'mediaint(8)unsigned NOT NULL auto_increment,
'ticket_user_id'varchar(36)NOT  NULL,
PRIMARY KEY('id'))
AUTO_INCREMENT = 1; 
“; 
 
require_once(ABSPATH。'wp-admin / includes / upgrade.php'); 
dbDelta($ sql); 
add_option(  “db_version”,$ db_version); 
} 
  code>  pre> 
 
 

什么阻止这些表被创建? 是sql查询还是语法还是什么? p> div>

To solve this problem I remove all ' characters from the sql statements excluding around default values. Eg:

$sql1 ="CREATE TABLE IF NOT EXISTS  st_support_tickets 
(id  mediumint(8) unsigned NOT NULL auto_increment,
 ticket_user_id  varchar(36) NOT NULL,
 ticket_description TEXT,
 ticket_priority  varchar(255) default NULL,
 ticket_status  varchar(255) default NULL,
 ticket_type  varchar(255) default  'Private',
PRIMARY KEY ( id ))
AUTO_INCREMENT=1;
";

$sql2 = "CREATE TABLE IF NOT EXISTS st_support_priorities 
( id  mediumint(8) unsigned NOT NULL auto_increment,
 ticket_priority  varchar(36) NOT NULL,
PRIMARY KEY ( id ))
AUTO_INCREMENT=1;
";

Had no problems after this.

register_activation_hook(__FILE__, 'wp_table_install');

function wp_table_install(){
global $wpdb;
global $db_version;

$sql ="CREATE TABLE IF NOT EXISTS 'st_support_tickets'
('id' mediumint(8) unsigned NOT NULL auto_increment,
'ticket_id' varchar(36) NOT NULL,
'ticket_user_id' varchar(36) NOT NULL,
'ticket_description' TEXT,
'ticket_priority' varchar(255) default NULL,
'ticket_status' varchar(255) default NULL,
'ticket_type' varchar(255) default 'Private',
PRIMARY KEY ('id')) 
AUTO_INCREMENT=1;

CREATE TABLE IF NOT EXISTS 'st_support_priorities' 
('id' mediumint(8) unsigned NOT NULL auto_increment,
'ticket_user_id' varchar(36) NOT NULL,
PRIMARY KEY ('id'))
AUTO_INCREMENT=1;
";

require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
add_option("db_version", $db_version);
}

Try with this

$sql1 ="CREATE TABLE IF NOT EXISTS 'st_support_tickets'
('id' mediumint(8) unsigned NOT NULL auto_increment,
'ticket_id' varchar(36) NOT NULL,
'ticket_user_id' varchar(36) NOT NULL,
'ticket_description' TEXT,
'ticket_priority' varchar(255) default NULL,
'ticket_status' varchar(255) default NULL,
'ticket_type' varchar(255) default 'Private',
PRIMARY KEY ('id')) 
AUTO_INCREMENT=1";

$sql2 ="CREATE TABLE IF NOT EXISTS 'st_support_priorities' 
('id' mediumint(8) unsigned NOT NULL auto_increment,
'ticket_user_id' varchar(36) NOT NULL,
PRIMARY KEY ('id'))
AUTO_INCREMENT=1;
";

require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
dbDelta($sq2);

Tested and works fine..

register_activation_hook(__FILE__, 'wp_table_install');

function wp_table_install(){
    global $wpdb;
    global $db_version;

    $charset_collate = $wpdb->get_charset_collate();

    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );

    $sql ="CREATE TABLE IF NOT EXISTS st_support_tickets (
          id mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
          ticket_id varchar(36) DEFAULT '' NOT NULL,
          ticket_user_id varchar(36) DEFAULT '' NOT NULL,
          ticket_description TEXT DEFAULT '' NOT NULL,
          ticket_priority varchar(255) DEFAULT '' NOT NULL,
          ticket_status varchar(255) DEFAULT '' NOT NULL,
          ticket_type varchar(255) DEFAULT 'Private' NOT NULL,
          PRIMARY KEY (id)) $charset_collate;";

    dbDelta( $sql );

    $sql="CREATE TABLE IF NOT EXISTS st_support_priorities ( 
         id mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
         ticket_user_id varchar(36) DEFAULT '' NOT NULL,
         PRIMARY KEY (id)) $charset_collate;";

    dbDelta($sql);

    add_option("db_version", $db_version);
}