Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.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/8/mysql/60.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/2/shell/5.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 如何在创建表时创建外键_Php_Mysql_Sql - Fatal编程技术网

Php 如何在创建表时创建外键

Php 如何在创建表时创建外键,php,mysql,sql,Php,Mysql,Sql,我正在尝试创建一个连接外键的自动表创建,以便在同一个表中显示数据。我应该如何在创建表时建立表之间的连接 注意:这些表是同时创建的。在装载顺序中,首先使用Palle\u tbs 我不知道这个例子中是否可以使用ALTERTABLE,因为表是同时创建的。如果是这样,我应该怎么做 我试着这样引用另一张表 addcsv.php这是我调用方法的地方。 $lastest\u文件名未被atm使用 $csv->createPalleTable($latest_filename); $csv->inse

我正在尝试创建一个连接外键的自动表创建,以便在同一个表中显示数据。我应该如何在创建表时建立表之间的连接

注意:这些表是同时创建的。在装载顺序中,首先使用
Palle\u tbs

我不知道这个例子中是否可以使用ALTERTABLE,因为表是同时创建的。如果是这样,我应该怎么做

我试着这样引用另一张表

addcsv.php
这是我调用方法的地方。
$lastest\u文件名
未被atm使用

$csv->createPalleTable($latest_filename);
$csv->insertPalleTable($latest_filename, array_map("toNumber", fgetcsv($openfile, 1000, ";")));

$csv->createHoejde1($latest_filename);
$csv->insertHoejde1Table($latest_filename, array_map("toNumber", fgetcsv($openfile, 1000, ";")));
我可以添加更多的代码,只是觉得这样会让它更混乱

Csv.php
这是我制作表格和插入的地方

编辑我已更新我的尝试

我希望这两张桌子能连接起来。我得到的结果是
FK_palle=0

public function createHoejde1($latest_filename){
    return $this->db->toList("CREATE TABLE IF NOT EXISTS `csvHoejde1`( 
        id INT(11) AUTO_INCREMENT PRIMARY KEY,
        Name VARCHAR(50), 
        Datum VARCHAR(50), 
        Property VARCHAR(50), 
        Criterion VARCHAR(50),
        Type VARCHAR(50), 
        Nominal DECIMAL(10,2),    
        Actual DECIMAL(10,2),     
        Tolminus DECIMAL(10,2),   
        Tolplus DECIMAL(10,2),    
        Dev DECIMAL(10,2),
        FK_palle INT(11) REFERENCES Palle_tbs(`id`))
      ");}

public function insertHoejde1Table($latest_filename ,$getdata){
    return $this->db->toList("INSERT INTO `csvHoejde1` (`Name`, `Datum`, `Property`, `Criterion`, `Type`, `Nominal`, `Actual`,`Tolminus`,`Tolplus`,`Dev`)
    VALUES (:Name, :Datum, :Property, :Criterion, :Type, :Nominal, :Actual, :Tolminus, :Tolplus, :Dev)",
        [
        ':Name' => $getdata[0],
        ':Datum'=> $getdata[1],
        ':Property'=> $getdata[2],
        ':Criterion'=> $getdata[3],
        ':Type'=> $getdata[4],
        ':Nominal'=> $getdata[5], 
        ':Actual'=> $getdata[6],  
        ':Tolminus'=> $getdata[7],
        ':Tolplus'=> $getdata[8], 
        ':Dev'=> $getdata[9]      
        ]
    );}

public function createPalleTable($latest_filename){
    return $this->db->toList("CREATE TABLE IF NOT EXISTS `Palle_tbs`(
        id INT(11) AUTO_INCREMENT PRIMARY KEY,
        Palle_nr VARCHAR(50), 
        Varenummer VARCHAR(50), 
        Ordre_nummer VARCHAR(50), 
        Operatoer VARCHAR(50), 
        Maskine_nr VARCHAR(50), 
        Raavare_batch_nr VARCHAR(50), 
        Dato_ur_stillet VARCHAR(50), 
        Klokke_fuldsvejst VARCHAR(50), 
        Fuldstoebning_af_klokke VARCHAR(50),
        Afgratning_af_overflade VARCHAR(50), 
        Vaegt DECIMAL(10,2))
      ");}

public function insertPalleTable($latest_filename ,$palledata){
    return $this->db->toList("INSERT INTO `Palle_tbs` (`Palle_nr`, `Varenummer`, `Ordre_nummer`, `Operatoer`, `Maskine_nr`,
     `Raavare_batch_nr`, `Dato_ur_stillet`,`Klokke_fuldsvejst`,`Fuldstoebning_af_klokke`,`Afgratning_af_overflade`,`Vaegt`)
    VALUES (:Palle_nr, :Varenummer, :Ordre_nummer, :Operatoer, :Maskine_nr, :Raavare_batch_nr, :Dato_ur_stillet,
     :Klokke_fuldsvejst, :Fuldstoebning_af_klokke, :Afgratning_af_overflade, :Vaegt)",
        [

        ':Palle_nr' => $palledata[0],
        ':Varenummer'=> $palledata[1],
        ':Ordre_nummer'=> $palledata[2],
        ':Operatoer'=> $palledata[3],
        ':Maskine_nr'=> $palledata[4],
        ':Raavare_batch_nr'=> $palledata[5],
        ':Dato_ur_stillet'=> $palledata[6],
        ':Klokke_fuldsvejst'=> $palledata[7],
        ':Fuldstoebning_af_klokke'=> $palledata[8],
        ':Afgratning_af_overflade'=> $palledata[9],
        ':Vaegt'=> $palledata[10]
        ]
    );}

如果要将
表1
引用到
表2
,首先需要创建
表1

在您的声明中,您写了
外键(FK\u产品)引用了product\u tb(product\u id)
product\u tb
表中没有
product\u id
字段,您的意思是引用主键
id

然后,可以使用
外键
约束

例如:

CREATE TABLE table1
( --         ^----^-----------------------------------+
    id INT(6) NOT NULL PRIMARY KEY AUTO_INCREMENT, -- |
--  ^^---------------------------------------------------+
    someData VARCHAR(255)                          -- |  |
);                                                 -- |  |
                                                   -- |  |
CREATE TABLE table2                                -- |  |
(                                                  -- |  |
    id INT(6) NOT NULL PRIMARY KEY AUTO_INCREMENT, -- |  |
    otherData VARCHAR(255), --                        |  |
    table1_id INT(6), --               +--------------+  |
 -- ^-------^-------+                  |      +----------+
    --              |                  |      |
    --          v-------v            v----v  vv
    FOREIGN KEY table1_id REFERENCES table1 (id)
);
INSERT INTO table1
--         id
--         |    someData
--         |       |
--      v-----v  v---v
VALUES (DEFAULT, "foo"),
       (DEFAULT, "bar");

INSERT INTO table2
--         id
--         |    otherData
--         |        |          table1_id
--         |        |              |
--      v-----v  v------v          v
VALUES (DEFAULT, "blabla",         1),
       (DEFAULT, "bob the sponge", 1),
       (DEFAULT, "John Smith",     1),
       (DEFAULT, "forty two",      2),
       (DEFAULT, "Hello world",    2);
然后,您可以使用
INSERT
查询来填充表格。对于表2,您必须插入外键,它不会自动完成(您的DB不知道引用了哪一行)

例如:

CREATE TABLE table1
( --         ^----^-----------------------------------+
    id INT(6) NOT NULL PRIMARY KEY AUTO_INCREMENT, -- |
--  ^^---------------------------------------------------+
    someData VARCHAR(255)                          -- |  |
);                                                 -- |  |
                                                   -- |  |
CREATE TABLE table2                                -- |  |
(                                                  -- |  |
    id INT(6) NOT NULL PRIMARY KEY AUTO_INCREMENT, -- |  |
    otherData VARCHAR(255), --                        |  |
    table1_id INT(6), --               +--------------+  |
 -- ^-------^-------+                  |      +----------+
    --              |                  |      |
    --          v-------v            v----v  vv
    FOREIGN KEY table1_id REFERENCES table1 (id)
);
INSERT INTO table1
--         id
--         |    someData
--         |       |
--      v-----v  v---v
VALUES (DEFAULT, "foo"),
       (DEFAULT, "bar");

INSERT INTO table2
--         id
--         |    otherData
--         |        |          table1_id
--         |        |              |
--      v-----v  v------v          v
VALUES (DEFAULT, "blabla",         1),
       (DEFAULT, "bob the sponge", 1),
       (DEFAULT, "John Smith",     1),
       (DEFAULT, "forty two",      2),
       (DEFAULT, "Hello world",    2);

当您尝试创建外键时,引用的表必须存在。这很有意义。我会先尝试创建表格,然后尝试使用引用。我真的认为这很有意义,但就是不起作用。你能告诉我我做错了什么吗?如果neededit给了我一个0,那么表Palle\u tbs已经存在。这是一个
CREATE table
语句,而不是
SELECT
。你不应该得到结果。如果成功创建了表,是否签入了您最喜欢的数据库管理工具(phpMyAdmin/MySQL Workbench)?它与其他选项卡没有任何关系。(使用phpMyAdmin),结果仍然为0的意思是它没有连接到id。因此,当数据插入到表中时,它会显示0,而不是
palle\u tbs.id的id号。您是否在插入查询中包含外键?