尝试创建表时出错

时间:2019-03-05 作者:greenman0914

我正在尝试在phpmyadmin中创建一个新表。我正在使用MAMP,这当然是wordpress内部的内容。

<?php
function testtheme_database() {
  global $wpdb;

  global $testtheme_db_version;
  $testtheme_db_version = "1.0";

  $table = $wpdb->prefix . "inquiries";

  $charset_collate = $wpdb->get_charset_collate();


  $sql = "CREATE TABLE $table (
    id mediumint(9) NOT NULL AUTO_INCREMENT,
    first-name varchar(50) NOT NULL,
    last-name varchar(50) NOT NULL,
    email varchar(50) DEFAULT \'\' NOT NULL,
    message longtext NOT NULL,
    PRIMARY KEY (id)
  ) $charset_collate; ";

  require_once(ABSPATH . \'wp-admin/includes/upgrade.php\');
  dbDelta($sql);
}
add_action( \'after_setup_theme\', \'testtheme_database\' );
当我尝试刷新/重新加载wordpress中的某个页面时,出现了此错误,在我的情况下,是“联系我们”页面:

WordPress database error: [You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'-name varchar(50) NOT NULL, last-name varchar(50) NOT NULL, email varcha\' at line 3] CREATE TABLE wp_inquiries ( id mediumint(9) NOT NULL AUTO_INCREMENT, first-name varchar(50) NOT NULL, last-name varchar(50) NOT NULL, email varchar(50) DEFAULT \'\' NOT NULL, message longtext NOT NULL, PRIMARY KEY (id) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci
它应该在phpmyadmin中创建一个名为wp\\u inquires的新表,但只是得到了那个错误,没有创建表。

1 个回复
SO网友:Krzysiek Dróżdż

从MySQL参考:

无引号标识符中允许的字符:ASCII:[0-9,a-z,a-z$(基本拉丁字母,数字0-9,美元,下划线)

  • 扩展:U+0080。。引用标识符中允许的U+FFFF字符包括完整的Unicode基本多语言平面(BMP),U+0000除外:ASCII:U+0001。。U+007F扩展:U+0080。。带引号或不带引号的标识符中不允许使用U+FFFF(U+0000)和补充字符(U+10000及以上)因此您必须删除- 列名称中的字符或引用这些名称。

    值得一提的是,使用与WP相同的命名约定将是一个好主意。因此,表名应为小写,并使用_ 作为分隔符。

  • 相关推荐

    与直接使用$wpdb->Query()相比,$wpdb->Prepare()、Then$wpdb->Query()可以降低整个页面的加载速度

    让我们假设$wpdb->query() 可根据需要正确逃逸,因此无需使用$wpdb->prepare(). 然而,Envato(而非w.org)的一些新要求要求首先检查准备功能,我认为这有4个缺点:如果我们有10个以上的变量,那么很难读取查询文本。如果我们说插件上有500个查询,那么会降低网站负载。不太适合动态查询参数,即可能有或没有国家、城市、州、邮政编码、街道地址、公寓号码的地理位置搜索。我们不能为每个场景使用prepare,因为它在代码方面会变得太大。无需双重验证。特别是如果给定的验证已