gpt4 book ai didi

php - Wordpress 插件表,无法使用 dbDelta 创建,尽管 sql 是正确的

转载 作者:可可西里 更新时间:2023-11-01 08:27:14 26 4
gpt4 key购买 nike

我正在尝试让我的 Wordpress 插件创建包含激活数据的表格。

SQL 似乎执行了并且本身是正确的(实际上,如果我手动将其复制到 SQL 服务器,它就可以工作)

我的PHP代码如下

register_activation_hook( __FILE__, function () {
global $wpdb;
$table_name = $wpdb->prefix . "ajax_preview_galleries";
$charset_collate = $wpdb->get_charset_collate();

//Table definition
$sql = "CREATE TABLE $table_name (
gallery_id int(10) unsigned NOT NULL AUTO_INCREMENT,
gallery_name varchar(100) COLLATE utf8_unicode_ci NOT NULL,
gallery_slug varchar(100) COLLATE utf8_unicode_ci NOT NULL,
gallery_selected_terms text COLLATE utf8_unicode_ci NOT NULL,
gallery_select_by tinyint(3) unsigned NOT NULL COMMENT '0: categories only; 1: tags only; 2: both',
gallery_post_count tinyint(3) unsigned NOT NULL,
gallery_custom_class_container varchar(200) COLLATE utf8_unicode_ci NOT NULL,
gallery_custom_class_buttons varchar(200) COLLATE utf8_unicode_ci NOT NULL,
gallery_transition_time int(10) unsigned NOT NULL DEFAULT '500',
gallery_loading_type tinyint(3) unsigned NOT NULL DEFAULT '1',
gallery_navigator_loop tinyint(3) unsigned NOT NULL DEFAULT '1',
PRIMARY KEY (gallery_id)
) $charset_collate;";

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

$res = dbDelta($sql);
});

如果我输出 $res,我得到这个:Array ( [orhub_ajax_preview_galleries] => Created table orhub_ajax_preview_galleries )

这表明一切都很好。但是,如果我检查数据库,表不存在,插件确实无法存储数据。

正如我所说,我尝试输出 $sql 并将其直接粘贴到 phpMyAdmin 中。这行得通,所以问题似乎不在查询中。

那还有什么问题呢?

顺便说一句,我也试过 maybe_create_table,但也没有用

最佳答案

好的,所以您在 gallery_select_by 列的 CREATE TABLE 中的注释中包含非法字符

尝试:

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

//Table definition
$sql = "CREATE TABLE $table_name (
gallery_id int(10) unsigned NOT NULL AUTO_INCREMENT,
gallery_name varchar(100) COLLATE utf8_unicode_ci NOT NULL,
gallery_slug varchar(100) COLLATE utf8_unicode_ci NOT NULL,
gallery_selected_terms text COLLATE utf8_unicode_ci NOT NULL,
gallery_select_by tinyint(3) unsigned NOT NULL COMMENT '0 - categories only. 1 - tags only. 2 - both',
gallery_post_count tinyint(3) unsigned NOT NULL,
gallery_custom_class_container varchar(200) COLLATE utf8_unicode_ci NOT NULL,
gallery_custom_class_buttons varchar(200) COLLATE utf8_unicode_ci NOT NULL,
gallery_transition_time int(10) unsigned NOT NULL DEFAULT '500',
gallery_loading_type tinyint(3) unsigned NOT NULL DEFAULT '1',
gallery_navigator_loop tinyint(3) unsigned NOT NULL DEFAULT '1',
PRIMARY KEY (gallery_id)
) $charset_collate;";

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

$res = dbDelta($sql);

事情是,你有 :; 在你的评论中,而 ; 可能是结束 sql 语句的信号,所以你有错误。

我尝试搜索转义它,但只找到了 this对于字符串文字,与冒号和分号无关。

希望这对您有所帮助。

关于php - Wordpress 插件表,无法使用 dbDelta 创建,尽管 sql 是正确的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34300767/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com