未创建Wordpress数据库表

时间:2012-11-12 03:50:22

标签: mysql database wordpress

有人可以帮助我弄清楚为什么wordpress在我激活我的插件时不会创建“wp_locations”表。

global $wp_locations_version;
$wp_locations_version = "1.1";

define( 'LOCATIONURL', plugins_url().'/wp_locations' );

function locations_install() {
    global $wpdb;
    global $wp_locations_version;


    $sql = "CREATE TABLE IF NOT EXISTS wp_locations (
    ID BIGINT NOT NULL AUTO_INCREMENT,
    location VARCHAR(100) NOT NULL,
    address VARCHAR(255) NOT NULL,
    lattitude INT,
    longitude INT,
    description MEDIUMTEXT NULL,
    person VARCHAR(50) NOT NULL,
    personimg VARCHAR(255) NOT NULL,
    email VARCHAR(255) NULL,
    phone INT,
    sort INT
    );";

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

    add_option("wp_locations_version", $wp_locations_version);
}
register_activation_hook( __FILE__ , 'locations_install' );

2 个答案:

答案 0 :(得分:1)

您需要在SQL中包含至少一个KEY字段。

来自http://codex.wordpress.org/Creating_Tables_with_Plugins#Creating_or_Updating_the_Table

  • 您必须在SQL语句中将每个字段放在自己的行中。

  • 单词PRIMARY KEY和。之间必须有两个空格 主键的定义。

  • 您必须使用关键字KEY而不是其同义词INDEX和您必须至少包含一个KEY。

  • 您不得在字段名称周围使用任何撇号或反引号。

答案 1 :(得分:0)

代码中没有与数据库的连接。添加如下函数:

        function MySQLConnect( ) {
          $MySQLink = mysql_connect( DB_HOST, DB_USER, DB_PASSWORD ) ;// These parameters are defined in 'wp-config.php'
          if ( !$MySQLink ) :
            return FALSE ;
          else :
            return $MySQLink ;
          endif ;
        }

然后,在函数 locations_install()中,在开头添加以下行以建立连接:

        $Link = MySQLConnect( ) ;
        if ( !$Link ) return FALSE ;
        ...                        

希望这有帮助。

更新

站立纠正苏达。

在Wordpress中执行此操作的方法应该是使用类wpdb,它不需要新连接。在这种情况下,存在以下问题:

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

从wp-admin调用插件脚本。它应该是:

require_once('/includes/upgrade.php');

抱歉误导。