2017-08-09 58 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

不要發佈其他信息作爲答案。用所有必要的信息更新您的問題。 –

相關問題