【问题标题】:Using PHP to create two tables in the WordPress database when plugin is activated激活插件时使用 PHP 在 WordPress 数据库中创建两个表
【发布时间】:2015-05-01 04:43:38
【问题描述】:

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

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);
}

是什么阻止了这些表的创建?是sql查询还是语法还是什么?

【问题讨论】:

  • 请附上您看到的任何错误消息。
  • 啊,是的,我忘记在插件激活时提及此错误:“插件在激活期间生成了 619 个意外输出字符。如果您注意到“标头已发送”消息,联合提要或其他问题问题,请尝试停用或删除此插件。”

标签: php sql database wordpress plugins


【解决方案1】:

为了解决这个问题,我从 sql 语句中删除了所有 ' 字符,不包括默认值。例如:

$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;
";

在此之后没有任何问题。

【讨论】:

    【解决方案2】:
    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);
    }
    

    【讨论】:

    • 看来您所做的只是从 ticket_description 字段中删除“默认 NULL”。这没有做任何事情。
    • 这是错误:“插件在激活期间生成了 607 个字符的意外输出。如果您发现“标头已发送”消息、联合提要问题或其他问题,请尝试停用或删除此插件。 "
    • 你在激活钩子或附加函数的某处有回声
    【解决方案3】:

    试试这个

    $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);
    

    【讨论】:

    • 我收到此错误:插件在激活期间生成了 318 个字符的意外输出。如果您发现“标头已发送”消息、联合提要问题或其他问题,请尝试停用或删除此插件。
    【解决方案4】:

    经过测试,运行良好..

    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);
    }
    

    【讨论】:

      猜你喜欢
      • 2015-02-21
      • 2019-08-19
      • 1970-01-01
      • 2017-11-11
      • 1970-01-01
      • 1970-01-01
      • 2016-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多