只创建一个表,而不创建另一个表

时间:2015-03-03 作者:Roger Andersen

我有这个功能,可以在激活插件时创建两个表。只创建wp\\u wpt\\u stats表,而不创建wp\\u wpt\\u列表。我知道dbdelta很挑剔,但我看不出我做错了什么。

global $wpt_db_version;
$wpt_db_version = "1.0";

function wpt_install() {
    global $wpdb;
    global $wpt_db_version;

    $table_add_toplist = $wpdb->prefix . \'wpt_list\';
    $table_add_wptstats = $wpdb->prefix . \'wpt_stats\';
    $charset_collate = $wpdb->get_charset_collate();

    //-----------------------table_one-----------------------------------
        if($wpdb->get_var(\'SHOW TABLES LIKE \' . $table_add_toplist) != $table_add_toplist){
      $sql_one = \'CREATE TABLE \' . $table_add_toplist . \'(
          id INT(11) UNSIGNED AUTO_INCREMENT,
          link_id INT(11),
          visitor_ip VARCHAR(15)
          click_at DATETIME NOT NULL,
          site_votes INT(11),
          on_page VARCHAR(255),
          UNIQUE KEY id (id)
    ) \'. $charset_collate .\';\';


    require_once(ABSPATH . \'wp-admin/includes/upgrade.php\');
    dbDelta($sql_one);
    }

    //-----------------------table_two-----------------------------------
        if($wpdb->get_var(\'SHOW TABLES LIKE \' . $table_add_wptstats) != $table_add_wptstats){
      $sql_two = \'CREATE TABLE \' . $table_add_wptstats . \'(
          id INT(11) UNSIGNED AUTO_INCREMENT,
          link_id INT(11),
          impressions INT(11),
          inclick INT(11),
          outclick INT(11),
          PRIMARY KEY  (id)
    ) \'. $charset_collate .\';\';

    require_once(ABSPATH . \'wp-admin/includes/upgrade.php\');
    dbDelta($sql_two);
    }

    add_option("wpt_db_version", $wpt_db_version );
}
register_activation_hook(__FILE__,\'wpt_install\');

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

dbdelta 要求:

您必须在SQL语句中将每个字段放在自己的行上必须使用关键字key而不是其同义词索引,并且必须至少包含一个关键字

$sql_one = \'CREATE TABLE \' . $table_add_toplist . \'(
      id INT(11) UNSIGNED AUTO_INCREMENT,
      link_id INT(11),
      visitor_ip VARCHAR(15)
      click_at DATETIME NOT NULL,
      site_votes INT(11),
      on_page VARCHAR(255),
      UNIQUE KEY id (id)
) \'. $charset_collate .\';\';
我们可以看到,您没有在每一行的末尾附加逗号:

      link_id INT(11),
      visitor_ip VARCHAR(15)
      click_at DATETIME NOT NULL,
因此,SQL无效,如下所示visitor_ip 结尾缺少逗号

结束

相关推荐

WPDB for post count on post

我知道了如何在author上显示自定义帖子类型的计数。php。我也试图在他们的自定义帖子上显示统计数据。同一查询不起作用。如何在自定义帖子上为用户显示自定义帖子的数量?我下面的查询适用于作者。php不是帖子类型本身,我不理解。 <?php global $wp_query; $curauth = $wp_query->get_queried_object(); $post_count = $wpdb->get_