Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 尝试创建表时无法修复mysql中的语法错误_Php_Mysql_Create Table - Fatal编程技术网

Php 尝试创建表时无法修复mysql中的语法错误

Php 尝试创建表时无法修复mysql中的语法错误,php,mysql,create-table,Php,Mysql,Create Table,我犯了一个错误 您的SQL语法有错误;似乎错误就在附近:' 实体id INT(10)、主键(id)、外键(实体id))'位于 第3行 我无法理解如何修理它 而当我加上这个 CREATE TABLE category( id int(10) NOT NULL AUTO_INCREMENT, entity_type varchar(32), entity_id INT(10), PRIMARY KEY (id), FOREIGN KEY (entity_id) ) 上面的代码修

我犯了一个错误

您的SQL语法有错误;似乎错误就在附近:' 实体id INT(10)、主键(id)、外键(实体id))'位于 第3行

我无法理解如何修理它

而当我加上这个

CREATE TABLE category(
  id int(10) NOT NULL AUTO_INCREMENT,
  entity_type varchar(32),
  entity_id INT(10),
  PRIMARY KEY (id),
  FOREIGN KEY (entity_id)
)
上面的代码修复了错误

下面的代码给出了外键约束,即使我尝试先创建图像和类别表,然后在用户表中向其添加关系

CREATE TABLE `Image` (
  `Id [PK]` int (10)                               ,
  `EntityType` varchar(32),
  `EntityId [FK]` int(10)
);
最后一行是错的。 试着这样做:

$sql_image = 'CREATE TABLE IF NOT EXISTS image (
    id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    entity_type VARCHAR(32) NOT NULL,
    entity_id INT(10) UNSIGNED NOT NULL,
    PRIMARY KEY (id) )';

if ($db->database->createTable($sql_image)) {   echo "Image Table Created Successfully"; }

$sql_category = 'CREATE TABLE IF NOT EXISTS category (
    id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    entity_type VARCHAR(32) NOT NULL,
    entity_id INT(10) UNSIGNED NOT NULL,
    PRIMARY KEY (id) );';

if ($db->database->createTable($sql_category)) {
    echo "Category Table Created Successfully"; }

$sql_user = 'Create TABLE IF NOT EXISTS user(
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    first_name varchar(255),
    last_name varchar(255),
    email varchar(255),
    category int(10),
    status boolean,
    user_profile_photo int(10),
    FOREIGN KEY (user_profile_photo) references image(entity_id),
    FOREIGN KEY (category) references category(entity_id) );';

if ($db->database->createTable($sql_user)) {
    echo "User Table Created Successfully"; }

如果希望添加外键,则需要定义引用表的含义,即
实体\u id
所属的表

FOREIGN KEY (product_category, product_id)
      REFERENCES product(category, id)'
FOREIGN KEY (product_category, product_id)
      REFERENCES second_table(category, id)
我可以看到2个错误 1) “MySQL需要外键和引用键的索引”。如果不需要,MySQL将在引用表(用户)上创建键,但必须在实体_id(图像、类别)上的引用表上创建键 2) '外键和引用键中的相应列必须具有相似的数据类型。整数类型的大小和符号必须相同'

这将合成并生成表(您需要决定键k1和k2的类型):-

  • 验证是否使用相同的数据类型定义了两个表列
  • 验证表及其列是否具有相同的排序规则字符集,例如utf-8
    • 即使表具有相同的排序规则,列也可能具有不同的排序规则
  • 验证两列是否具有相同的签名定义。如果引用列是int(10)unsigned,那么引用列也应该是int(10)unsigned 专栏
  • 就我而言 用户表中的列user\u profile\u photo和图像表中的id具有不同的签名定义。因此,它没有添加外键。 外键(用户配置文件\照片)引用图像(id), 外键(类别)引用类别(id)

    $sql\u image='如果不存在,则创建表映像(
    id INT(10)UNSIGNED NOT NULL AUTO_INCREMENT,//INT(10)UNSIGNED应该与下面用户表中的相同。
    实体类型VARCHAR(32)不为空,
    主键(id)
    )';
    如果($db->database->createTable($sql\u image)){
    echo“已成功创建图像表

    ”; } $sql_category='创建表(如果不存在)类别( id INT(10)UNSIGNED NOT NULL AUTO_INCREMENT,//INT(10)UNSIGNED应该与下面用户表中的相同。 实体类型VARCHAR(32)不为空, 主键(id) );'; 如果($db->database->createTable($sql\U类别)){ echo“类别表创建成功

    ”; } $sql_user='如果用户不存在,则创建表( id INT(10)非空自动增量主键, 名字varchar(255), 姓氏varchar(255), 电子邮件varchar(255), 类别int(10)UNSIGNED NOT NULL,//int(10)UNSIGNED应该是类别表中的匹配id。 状态布尔值, 用户配置文件照片int(10)未签名非空, 外键(用户配置文件\照片)引用图像(id), 外键(类别)引用类别(id) );'; 如果($db->database->createTable($sql\u user)){ echo“已成功创建用户表

    ”; }
    外键(实体id)引用实体(id)
    ,这里的
    实体
    是关系表名称,
    (id)
    是关系表中的列。如果删除',外键(实体id)',它工作吗?@是的,它工作时没有外键如果有疑问,请阅读手册。顺便说一句,外键只能引用1个表。我有两个表用户和博客引用实体\u id我如何使用多个references@harshal,只需写入外键行,然后在第二行更改表。请参阅我的文章,我编辑了itI,但出现上述错误:#1215-无法添加外键约束可能是因为表用户和博客未创建。否,它也不能与一个外键一起使用,因此可能需要先添加表,然后创建另一个具有此外键约束的表
    CREATE TABLE category(
      id int(10) NOT NULL AUTO_INCREMENT,
      entity_type varchar(32),
      entity_id INT(10),
      PRIMARY KEY (id),
      FOREIGN KEY (entity_id) REFERENCES Entity(entity_id)
    )
    
    drop table if exists us;
    drop table if exists i;
    drop table if exists c;
    
    CREATE TABLE IF NOT EXISTS i (
        id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
        entity_type VARCHAR(32) NOT NULL,
        entity_id INT(10) UNSIGNED NOT NULL,
        PRIMARY KEY (id) );
    alter table i
        add key k1(entity_id);
    
    CREATE TABLE IF NOT EXISTS c (
        id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
        entity_type VARCHAR(32) NOT NULL,
        entity_id INT(10) UNSIGNED NOT NULL,
        PRIMARY KEY (id) );
    alter table c
        add key k2(entity_id);
    
    Create TABLE IF NOT EXISTS us(
        id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        first_name varchar(255),
        last_name varchar(255),
        email varchar(255),
        category int(10) unsigned,
        status boolean,
        user_profile_photo int(10) unsigned,
        FOREIGN KEY fk1(user_profile_photo) references i(entity_id),
        FOREIGN KEY (category) references c(entity_id) 
        );
    
    $sql_image = 'CREATE TABLE IF NOT EXISTS image (
        id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, // int(10) UNSIGNED should be same as that in user table below.
        entity_type VARCHAR(32) NOT NULL,
        PRIMARY KEY (id)
    )';
    
    if ($db->database->createTable($sql_image)) {
      echo "Image Table Created Successfully<br><br>";
    }
    
    $sql_category = 'CREATE TABLE IF NOT EXISTS category (
        id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, // int(10) UNSIGNED should be same as that in user table below.
        entity_type VARCHAR(32) NOT NULL,
        PRIMARY KEY (id)
    );';
    
    if ($db->database->createTable($sql_category)) {
        echo "Category Table Created Successfully<br><br>";
    }
    
    $sql_user = 'CREATE TABLE IF NOT EXISTS user(
        id INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
        first_name varchar(255),
        last_name varchar(255),
        email varchar(255),
        category int(10) UNSIGNED NOT NULL, //int(10) UNSIGNED should be match id from category table.
        status boolean,
        user_profile_photo int(10) UNSIGNED NOT NULL,
        FOREIGN KEY (user_profile_photo) references image(id),
        FOREIGN KEY (category) references category(id)
    );';
    
    if ($db->database->createTable($sql_user)) {
        echo "User Table Created Successfully<br><br>";
    }