php - 无法插入 : A foreign key constraint fails

标签 php mysql database sql-insert foreign-key-relationship

我有以下表格:

CREATE TABLE IF NOT EXISTS `location`(
    `ID` int(11) NOT NULL,
    `name` varchar(25) NOT NULL,
    `water` varchar(25) NOT NULL,
    `fodder` varchar(25) NOT NULL,
    `access` varchar(25) NOT NULL,
    PRIMARY KEY  (`ID`)
    KEY `water` (`water`)
    KEY `fodder` (`fodder`)
    KEY `access` (`access`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ;
CREATE TABLE IF NOT EXISTS `watercondition`(
    `ID` int(11) NOT NULL,
    `watervalue` varchar(25) NOT NULL,
    PRIMARY KEY  (`watervalue`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ;
CREATE TABLE IF NOT EXISTS `foddercondition`(
    `ID` int(11) NOT NULL,
    `foddervalue` varchar(25) NOT NULL,
    PRIMARY KEY  (`foddervalue`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ;
CREATE TABLE IF NOT EXISTS `accesscondition`(
    `ID` int(11) NOT NULL,
    `accessvalue` varchar(25) NOT NULL,
    PRIMARY KEY  (`accessvalue`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ;

对于约束表:

ALTER TABLE `location`
    ADD CONSTRAINT `location_ibfk2` FOREIGN KEY (`water`) REFERENCES `watercondition` (`watervalue`),
    ADD CONSTRAINT `location_ibfk3` FOREIGN KEY (`fodder`) REFERENCES `foddercondition` (`foddervalue`),
    ADD CONSTRAINT `location_ibfk4` FOREIGN KEY (`access`) REFERENCES `accesscondition` (`accessvalue`);

在我的 php 文件中,我想像这样向所有表插入一个值:

$sqlwater = "INSERT INTO  `watercondition` (`ID`, `watervalue`) VALUES ('".$_SESSION['loc_id']."', '$watervalue')";
$resultwater = mysqli_query($con, $sqlwater) or die (mysqli_error($con));

$sqlfodder = "INSERT INTO  `foddercondition` (`ID`, `foddervalue`) VALUES ('".$_SESSION['loc_id']."', '$foddervalue')";
$resultfodder = mysqli_query($con, $sqlfodder) or die (mysqli_error($con));

$sqlaccess = "INSERT INTO  `accesscondition` (`ID`, `accessvalue`) VALUES ('".$_SESSION['loc_id']."', '$accessvalue')";
$resultaccess = mysqli_query($con, $access) or die (mysqli_error($con));

$sqlloc = "INSERT INTO  `location` (`ID`, `name`) VALUES ('".$_SESSION['loc_id']."', '$name')";
$resultaccess = mysqli_query($con, $access) or die (mysqli_error($con));

但是当我执行 php 文件时,我得到这个错误:

Cannot add or update a child row: a foreign key constraint fails (mydb.location, CONSTRAINT location_ibfk2 FOREIGN KEY (water) REFERENCES watercondition (watervalue))

当我检查我的数据库时,来自 waterfodderaccess 的值已经被插入到数据库中,但不在我的数据库中位置表。

最佳答案

location 表的插入还必须包含 waterfodderlocation 列的值。它们是 location 表中的列,不能被忽略。

此外,您在最终查询中使用了错误的查询变量。

我想这里发生的事情是 MYSQL 在检查您是否具有所有 NOT NULL 字段的值之前正在验证约束,因此您在更明显的错误之前得到约束错误关于缺少列值。

$sqlloc = "INSERT INTO  `location` 
           (`ID`, `name`, `water`, `fodder`, `location`) 
      VALUES ('{$_SESSION['loc_id']}', '$name', 
              '$watervalue', '$foddervalue', '$accessvalue' )";

$resultaccess = mysqli_query($con, $sqlloc) or die (mysqli_error($con));

关于php - 无法插入 : A foreign key constraint fails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35557704/

相关文章:

php - 根据行中的值更改 sprintf 值

mysql - 如何修改此查询以添加一个新字段,其中包含原始记录总数的子集的字段的最大值?

php - 将用户重定向到登录时特定于其帐户的页面

mysql - 将带有一些预定义值的行插入到 SQL 表中,一些来自另一个表以及连接字符串。

sql - SQL中有固定的除法吗?

php - 使用 PDO/MySQL 仅显示 ID 不是具有相同 ID 的不同表的项目

php - 引用 - 这个错误在 PHP 中意味着什么?

php - 什么是 : in php?

php - 以一种形式从具有相同名称的多个多选下拉列表中检索数据

php - mySQL插入如果id存在否则发送错误给用户,我可以使用什么方法?