Wordpress插件数据库创建 - 如何添加多个" UNIQUE KEY""到插件激活表

时间:2016-08-12 17:25:02

标签: php mysql wordpress

好的,所以我试图将团队varchar设置为UNIQUE KEY,以便它在以下语句中触发重复键功能

$sql = "INSERT INTO {$wpdb->prefix}vote4team (team,votes) VALUES (%s,%i) ON DUPLICATE KEY UPDATE votes = votes + %i";

我错过了什么?

这是使用我的PluginFunctions.php

创建db函数
function create_vote4team_db() {
  global $wpdb;
  global $vote4team_db_version;

  $table_name = $wpdb->prefix . "vote4team";
  $charset_collate = $wpdb->get_charset_collate();

  $sql = "CREATE TABLE $table_name (
    id mediumint(9) NOT NULL AUTO_INCREMENT,
    time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
    team varchar(255) NOT NULL,
    votes int(11) NOT NULL,
    UNIQUE KEY id (id),
    UNIQUE KEY team (team)

  ) $charset_collate;";

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

  add_option( 'vote4team_db_version', $vote4team_db_version );

}

register_activation_hook( __FILE__, 'create_vote4team_db' );

3 个答案:

答案 0 :(得分:2)

我最终在phpmyAmin和一些SQL文档的帮助下解决了这个问题。显然,唯一键的大小有限。一旦我改变了

team varchar(255) NOT NULL更像team varchar(200) NOT NULL

之类的东西

有效。

答案 1 :(得分:0)

我猜这个语句会因类型转换失败而失败而不是唯一约束失败而失败。

在你的create语句中,有一个名为“id”的唯一索引,其中包含一列“id”,第二个索引称为“city”,其中包含一列“team”。

在insert语句中,您尝试更新名为“city”的列,该列可能应为“team”,并且您的values子句的字符串和整数值已反转。

答案 2 :(得分:0)

尝试将id设为主键,结果将与两个唯一键相同。

我在自己的插件中有表定义主键和唯一键,但我从未尝试过两个唯一键。注意关键字PRIMARY KEY和定义之间的两个空格,dbdelta有点古怪,出于某种原因需要两个空格。

  $sql = "CREATE TABLE $table_name (
    id mediumint(9) NOT NULL AUTO_INCREMENT,
    time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
    team varchar(255) NOT NULL,
    votes int(11) NOT NULL,
    PRIMARY KEY  id (id),
    UNIQUE KEY team (team)

  ) $charset_collate;";