大家好我正在写这个新问题,因为在阅读了几乎所有相关问题后,我仍然不明白为什么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();
}
?>
答案 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`);