2017-08-09 131 views
-1

嗨,大家好即时通讯编写这个新的问题,因为在阅读几乎所有相关问题后,我仍然不明白为什么MySQL会触发此错误:问题与插入到一个表中有一个外键


Cannot add or update a child row: a foreign key constraint fails (progetto_pal.corso, CONSTRAINT corso_ibfk_1 FOREIGN KEY (CodiceFiscale_IstrCorso) REFERENCES 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(); 
    } 

?> 
+0

你是为[SQL敞开注射](http://php.net/manual/en/security.database.sql-injection.php),应该真的使用[Prepared Statements](http://php.net/manual/en/m ysqli.quickstart.prepared-statements.php)而不是连接你的查询。特别是因为你没有逃避用户输入! –

+1

向我们展示这两个表的数据库模式。 –

+0

这不是问题,因为这将是一个不会上网的项目,所以它不会出现安全问题 –

回答

0

这里的创建到2台istruttore和Corso

科索SQL命令:

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`); 
+0

不要发布其他信息作为答案。用所有必要的信息更新您的问题。 –

相关问题