首页 > 解决方案 > 在表之间链接外键

问题描述

我有两张桌子:TEMA e SOTTOTEMA。在 TEMA 中,我有作为主键的 IDtema,它是自动递增的。我希望它是 sottotema 表中的外键,我在 phpmyadmin 中写了我的数据库,

ALTER TABLE sottotema ADD FOREIGN KEY (IDtema) REFERENCES tema (IDtema)

它不会给我错误,但外键不起作用。我在选择选项中预定义了主题,根据您选择的主题,您可以自己插入子主题。

       <select id = "tema" name = "tema">
           <option hidden></option>
           <option value = "Animali"> Animali</option>
           <option value = "Cucina"> Cucina </option>
           <option value = "Sport"> Sport </option>
           <option value = "Musica"> Musica </option>
           <option value = "Cinema"> Cinema </option>
           <option value = "Letteratura"> Letteratura </option>
       </select></br>
      
       <div id = "sottotema" style = "display:none">
           <p id = "titolosottotema"> Sottotema </p>
           <input type = "text" placeholder="Scrivi un sottotema" id = "st" name = "st"/>
       </div> 

所有这些显然都在 FORM 中,除了在 sottotema 表中插入 IDtema 作为外键外,一切正常。

我只报告数据库中的数据输入查询,但在我的 php 代码中还有其他内容,包括与数据库的连接

<?php
   
$sottotema = $_POST['st'];

$query = "INSERT INTO sottotemi (nomeSottotema) VALUES ('$sottotema')";
$result = mysqli_query($mysqli, $query);
if (!$result){​​​​​​
echo "errore 1";
}​​​​​​ else {​​​​​​
$query2 = "INSERT INTO blog (titoloBlog,nomeSottotema,nomeUtente,sfondo, font, colorefont) VALUES ('$titoloblog','$sottotema',(SELECT nomeUtente FROM utentiregistrati WHERE nomeUtente = '$nomeutente'),'$sfondo','$font','$colore');";
$result2 = mysqli_query($mysqli, $query2);
if(!$result2){​​​​​​
echo 'errore 2';
}​​​​​​

?>

在数据库中,我已经输入了我的预定义主题,因此主键 idtema 已经与特定主题相关联(例如 1 - Animali 等)。请帮帮我,我很绝望!!!!!!!

标签: phphtmljquerydatabaseforeign-keys

解决方案


要使外键起作用,您需要在 INSERT 操作中指定外表标识符,否则该行将是孤立的。而不是您需要INSERT INTO sottotemi (nomeSottotema) VALUES ('$sottotema')找到外部IDtema表( ) 版本):temaINSERTSELECT

INSERT INTO sottotemi
  (nomeSottotema, IDtema)
SELECT
  '$sottotema', T.IDtema
FROM tema AS T
WHERE T.nome = '$tema'


推荐阅读