为什么在安装插件时不执行使用$wpdb创建表?

时间:2016-12-12 作者:Allen Titan

这是我在安装插件时用来创建表的下面的代码。但是,我尝试了很多方法,但由于某些原因,它不起作用。还有其他有效的方法吗?请帮忙,提前谢谢

global $wpdb;
function creating_order_tables() {
    global $wpdb;

    $ptbd_table_name = $wpdb->prefix . \'printtextbd_order\';

    if ($wpdb->get_var("SHOW TABLES LIKE \'". $ptbd_table_name ."\'"  ) != $ptbd_table_name ) {

        $sql  = \'CREATE TABLE exone(
                customer_id INT(20) AUTO_INCREMENT,
                customer_name VARCHAR(255),
                order_type VARCHAR(255),
                choosen_template VARCHAR(255),
                order_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                PRIMARY KEY(customer_id))\';

        require_once(ABSPATH . \'wp-admin/includes/upgrade.php\');
        dbDelta($sql);
         echo "hello";
    }
}


register_activation_hook(__FILE__, \'creating_order_tables\');

2 个回复
最合适的回答,由SO网友:tormorten 整理而成

尝试使用其他方法。WordPress在插件激活期间触发挂钩activate_yourplugin/filename.php. 您可以使用它来创建表。

function creating_order_tables() {

    if(!get_option(\'tables_created\', false)) {

        global $wpdb;

        $ptbd_table_name = $wpdb->prefix . \'printtextbd_order\';

        if ($wpdb->get_var("SHOW TABLES LIKE \'". $ptbd_table_name ."\'"  ) != $ptbd_table_name ) {

            $sql  = \'CREATE TABLE exone(
            customer_id INT(20) AUTO_INCREMENT,
            customer_name VARCHAR(255),
            order_type VARCHAR(255),
            choosen_template VARCHAR(255),
            order_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
            PRIMARY KEY(customer_id))\';

            if(!function_exists(\'dbDelta\')) {
                require_once(ABSPATH . \'wp-admin/includes/upgrade.php\');
            }

            dbDelta($sql);
            echo "Tables created...";
            update_option(\'tables_created\', true);
        }
    }
}
add_action(\'activate_yourplugin/yourplugin.php\', \'creating_order_tables\');

SO网友:Kamaro

试试这个,还记得int可以有int的最大值(11)

<?php
global $wpdb;

// Set table name
$table = $wpdb->prefix . \'exone\';

$charset_collate = $wpdb->get_charset_collate();

// Write creating query
$query =  "CREATE TABLE IF NOT EXISTS  ".$table." (
            customer_id INT(11) AUTO_INCREMENT,
            customer_name VARCHAR(255),
            order_type VARCHAR(255),
            choosen_template VARCHAR(255),
            order_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
            PRIMARY KEY(customer_id)
            )$charset_collate;";

// Execute the query
$wpdb->query( $query );

相关推荐

$wpdb->get_row返回什么?

由于插件中的调试和错误查找,我有一个简短的问题。$wpdb->;如果没有结果,返回get\\u row()?文件说明:(array|object|null|void) Database query result in format specified by $output or null on failure. 但当查看源代码时,它似乎返回了;null“;。。。如果您能快速提供帮助,我将不胜感激,我一直认为它会返回一个空数组,但我可能弄错了!