【问题标题】:Trying To Create New Wordpress Database Table尝试创建新的 Wordpress 数据库表
【发布时间】:2012-10-18 10:32:30
【问题描述】:

只是试图在插件激活时创建一个新的数据库表。 出于对生活的热爱,我无法弄清楚为什么这不起作用。

function super_simple_photo_activate() {
global $wpdb;
$table_name = $wpdb->prefix."super_simple_photo_options";
if ($wpdb->get_var('SHOW TABLES LIKE '.$table_name) != $table_name) {
    $sql = 'CREATE TABLE '.$table_name.'(
        thumbs_max VARCHAR(3),
        image_max VARCHAR(4),
        image_quality VARCHAR(3),
        PRIMARY KEY  (id))';

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

    add_option("super_simple_photo_db_version", "1.0");
}
}
register_activation_hook(__FILE__, 'super_simple_photo_activate');

我已经花了至少 5 个小时来修补这个,但没有运气,激活也没有错误。

诀窍是什么 - id INTEGER NOT NULL - 感谢 t.thielemans

$sql = 'CREATE TABLE '.$table_name.'(
        id INTEGER NOT NULL,
        thumbs_max VARCHAR(3),
        image_max VARCHAR(4),
        image_quality VARCHAR(3),
        PRIMARY KEY  (id))';

【问题讨论】:

  • 注意:我必须将$table_name 放在SHOW TABLES LIKE 的引号中。否则,您发布的代码对我不起作用。

标签: database wordpress


【解决方案1】:

试试这个代码

register_activation_hook ( __FILE__, 'on_activate' );

function on_activate() {
    global $wpdb;
    $create_table_query = "
            CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}table1` (
              `id` bigint(20) unsigned NOT NULL default '0',
              `name` text NOT NULL,
              `address` text NOT NULL
            ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
    ";
    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    dbDelta( $create_table_query );
}

【讨论】:

  • Ratnakar 'ENGINE=MyISAM DEFAULT CHARSET=utf8' 是干什么用的?
  • 如果您使用 dbDelta,似乎不需要 IF NOT EXISTS - 如果表已经存在,它将比较架构并更新它,而不是覆盖整个表。 code.tutsplus.com/tutorials/…
  • 您绝对应该从示例中删除 IF NOT EXISTS,因为它会导致错误 - 如果 $create_table_query 正在更改,dbDelta 不会因此更新表。
【解决方案2】:

您的创建表语法错误,应该是:

 $sql = 'CREAT TABLE '.$table_name.'(
-----
 $sql = 'CREATE TABLE '.$table_name.'(

编辑:定义你的主键

 $sql = 'CREATE TABLE '.$table_name.'(
        id INTEGER NOT NULL,
        thumbs_max VARCHAR(3),
        image_max VARCHAR(4),
        image_quality VARCHAR(3),
        PRIMARY KEY (id))';

来自 W3schools 的一些关于 SQL 的额外信息:http://www.w3schools.com/sql/sql_primarykey.asp

【讨论】:

  • 谢谢!很尴尬,我错过了......更正应用但仍然没有运气。
  • 试试这个,这对我有用,没有id INTEGER,主键功能不起作用。
猜你喜欢
  • 1970-01-01
  • 2019-05-01
  • 2021-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-15
相关资源
最近更新 更多