为什么Worpress不在数据库中创建表?

时间:2016-04-03 作者:Allen Titan

基本上,这是我的主插件页面中唯一的代码。当我激活它时,它应该在数据库中创建表。但是,它根本不起作用。插件激活成功。请帮我弄清楚。

/*
* Plugin Name: Titan Video Plugin
* Description: A simple and my first plugin, just for testing.
* Author: Allen Titan.
* Version: 0.1.
* License: GPL3
*/

if(!defined(\'ABSPATH\')) exit;

register_activation_hook( __FILE__, \'titan_vedio_table\' );

function titan_vedio_table() {
global $wpdb;
global $titan_db_version;

$table_name = $wpdb->prefix ."titanvedio";

$sql = "CREATE TABLE " . $table_name . "(
    id BIGINT(25) NOT NULL AUTO_INCREMENT,
    time datetime DEFAULT \'0000-00-00 00:00:00\' NOT NULL,
    videoname VARCHAR(255) NOT NULL,
    video-des VARCHAR(255) NOT NULL,
    UNIQUE KEY id (id)
);";

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

add_option( \'titan_db_version\', $titan_db_version );
}

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

SQL是一种相当变化无常的语法,不确定它是否会产生影响,但请尝试在前面添加缺少的空格(并从末尾删除:

$sql = "CREATE TABLE " . $table_name . " (
    id BIGINT(25) NOT NULL AUTO_INCREMENT,
    time datetime DEFAULT \'0000-00-00 00:00:00\' NOT NULL,
    videoname VARCHAR(255) NOT NULL,
    video-des VARCHAR(255) NOT NULL,
    UNIQUE KEY id (id)
)";
另一件事我想知道是否允许连字符。video-des, 因为大多数表名使用_ 这让我想。。。这个答案似乎表明,只有用正确的引号括起来才可以,例如,反勾号不是单引号,因此您可能无论如何都要更改它,以避免将来出现问题:

https://stackoverflow.com/questions/3168644/can-a-table-field-contain-a-hyphen

(虽然它指的是表名而不是列键名,所以对此并不完全确定。)

在任何情况下,都可以检查dbDelta 这可能会给你一个更好的主意。由于重定向,您可能无法在激活期间看到结果,因此我将其写入一个文件:

$result = dbDelta($sql);
ob_start(); print_r($result); 
file_put_contents(get_template_directory().\'/dbdebug.txt\',ob_get_contents());
ob_end_clean();

相关推荐

Reducing Database Query Time

在这里寻找一些建议。有一位客户已经在WooCommerce上工作了大约一年半。我们为他们建了一个新网站。他们开始增加一条新的家具生产线。每个项目有700-800个产品变体组合。由于从生产线中添加了大约8个新产品,当您在管理中查看产品列表时,加载需要花费很长时间。如果您快速编辑一个产品,并说将其添加到第二个类别,然后单击“更新”,则完成查询平均需要10.2-10.8秒(根据查询监视器)。意识到有700-800个变体需要迭代,如果可以理解的话,可能需要更长的时间。我已经恢复到2017主题,禁用了除woocom