插入具有外键的表

时间:2017-08-09 09:10:21

标签: php mysql database

大家好我正在写这个新问题,因为在阅读了几乎所有相关问题后,我仍然不明白为什么mysql会触发这个错误:

  

无法添加或更新子行:外键约束失败   (progetto_pal.corso,CONSTRAINT corso_ibfk_1 FOREIGN KEY   (CodiceFiscale_IstrCorso)参考文献istruttore(CodiceFiscale))

阅读所有关于此错误我知道可以触发因为数据类型,因为我要插入的元素不通过检查,因为我在主表中不存在。

现在我已经检查了我要插入表corso的elemnet:类型是相同的,并且元素也存在于istruttore表中。 正如我现在所知道的那样,我要插入CodiceFiscale_IstrCorso列的元素与istruttore表中的任何行都不匹配。

所以我能做些什么来理解错误我在phpmyadmin上工作数据库和插入我在php中使用简单形式现在我发布了表单的sql部分的代码。

<?php

include('../connDB.php');

class corso{

    public $cc;
    public $des;
    public $cfi;


    function __construct ($cc, $des,$cfi){

        $this->cc=$cc;
        $this->des=$des;
        $this->cfi=$cfi;

    }

    function insRec(){
        global $mysqli;

        $query = "insert into Corso (Codice_Corso, Descrizione, CodiceFiscale_IstrCorso)
        values ('$this->cc', '$this->des', '$this->cfi')";

        if (!$mysqli->query($query)) {
            die($mysqli->error);
        } else {
            header("location: ../insert.php");
        }
    }
}   

    $operaz=(isset($_POST) && isset($_POST["operaz"]) ? $_POST["operaz"] : "");

    if($operaz=='insert'){
        $cc=(isset($_POST) && isset($_POST["ccC4"]) ? $_POST["ccC4"] : "");
        $des=(isset($_POST) && isset($_POST["desC4"]) ? $_POST["desC4"] : "");
        $cfi=(isset($_POST) && isset($_POST["cfiC4"]) ? $_POST["cfiC4"] : "");

        $checkIns = new corso($cc, $des, $cfi);
        $checkIns->insRec();
    }

?>

1 个答案:

答案 0 :(得分:0)

这里是创建2表istruttore和corso

的sql命令

的Corso:

CREATE TABLE `corso` (                                           
`Codice_Corso` char(15) COLLATE utf8_roman_ci NOT NULL,
`Descrizione` char(40) COLLATE utf8_roman_ci NOT NULL,  
`CodiceFiscale_IstrCorso` char(16) COLLATE utf8_roman_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_roman_ci;
ALTER TABLE `corso`
  ADD PRIMARY KEY (`Codice_Corso`),
  ADD KEY `REF_Corso_istru_FK` (`CodiceFiscale_IstrCorso`);

istruttore:

CREATE TABLE `istruttore` (
  `CodiceFiscale` char(16) COLLATE utf8_roman_ci NOT NULL,
  `Nome` char(15) COLLATE utf8_roman_ci NOT NULL,
  `Cognome` char(15) COLLATE utf8_roman_ci NOT NULL,
  `Indirizzo` char(50) COLLATE utf8_roman_ci NOT NULL,
  `Provincia` char(2) COLLATE utf8_roman_ci NOT NULL,
  `Cap` int(6) NOT NULL,
  `Citta` char(10) COLLATE utf8_roman_ci NOT NULL,
  `Telefono` int(12) NOT NULL,
  `Data_di_Nascita` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_roman_ci; 
  ALTER TABLE `istruttore`
  ADD PRIMARY KEY (`CodiceFiscale`);