Php 无法添加或更新子行:外键约束失败

Php 无法添加或更新子行:外键约束失败,php,mysql,foreign-keys,constraints,Php,Mysql,Foreign Keys,Constraints,我正在尝试将通知标题和通知内容插入通知表,将类别类型插入类别表,但我遇到以下错误,无法解决 致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[23000]:完整性约束冲突:C:\xampp\htdocs\add_notice.php中的1048列“category_type”不能为null。php:17堆栈跟踪:0 C:\xampp\htdocs\add_notice.php17:PDOStatement->执行C:\xampp\htdocs\add_notice.ph

我正在尝试将通知标题和通知内容插入通知表,将类别类型插入类别表,但我遇到以下错误,无法解决

致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[23000]:完整性约束冲突:C:\xampp\htdocs\add_notice.php中的1048列“category_type”不能为null。php:17堆栈跟踪:0 C:\xampp\htdocs\add_notice.php17:PDOStatement->执行C:\xampp\htdocs\add_notice.php第17行中抛出的1{main}

MySQL

add_notice.php

谢谢

我认为你应该在插入通知之前先插入类别

当您插入通知时,它没有引用的类别,因此约束有效。

首先,此名称=添加通知。表单不包含name属性,除非与jQuery一起使用,我在这里看不到jQuery

另外,这里发生的事情是,这两个POST数组很可能是空的,正如@Drew在下面给出的答案中所说的那样。在显示表单之前,插入将与空白一起发生

你需要使用!针对所有POST数组清空。执行此操作,或者删除约束并使用默认值

使用错误报告

参考资料:

另外,你还缺少一个约束。初始查询中有4个,但只有3个在准备查询后绑定

$query2 = "INSERT INTO notices (notice_id, notice_title, notice_content, notice_category_id) VALUES (:notice_id, :notice_title, :notice_content, :notice_category_id)";
$query2 = $connection->prepare($query2);
$query2->bindParam(":notice_id", $_POST["notice_id"]);
$query2->bindParam(":notice_title", $_POST["notice_title"]);
$query2->bindParam(":notice_content", $_POST["notice_content"]);
$query2->execute();
由于notice\u id是AI,您需要将其从查询中删除,并添加此处缺少的:notice\u category\u id

通知标题和通知内容为空的一个主要原因是:

您需要为以下内容添加值,并修复隐藏缺少类型的语法错误:

<input name="notice_id" hidden />
<input name="category_id" hidden />
应该是这样的:

<input name="notice_id" type="hidden" value="example_value_x" />
<input name="category_id" type="hidden" value="example_value_y" />
注:value=example\u value\u x和value=example\u value\u y是代表值。您需要为其各自的值填写该表

至于:notice\u category\u id绑定将使用哪一个,则未知。您将需要填写相应的值

我相信我已经给了你足够的时间让你的代码工作。现在由你来填补一些空白。
因此categories.category_id没有使您所做的操作有效的值。请注意,第一次插入失败。也许第二次插入会把事情弄清楚,但这只是代码的顺序,可能是重复的:thing is here name=add\u注意表单不包含name属性,除非与jQuery一起使用,我在这里看不到jQuery。另外,这里发生的事情是,这两个POST数组很可能是空的,正如@Drew在下面给出的答案中所说的那样。在显示表单之前,插入将与空白一起发生。你需要使用!针对所有POST数组清空。要么这样做,要么删除约束。使用错误报告。@Drew Anytime Drew。我不会就此发布答案,因为我担心这只会打开一罐我无法放回的虫子,并被永久地锁起来。编辑:不,我想我会把我的评论作为回答。等等我贴了一张。@Drew我注意到这里还有其他的东西。4个绑定值,但在其bindParam中有3个,并使用AI'd绑定;附加故障。编辑了我的答案。我试过了,我想Drew是在暗示,但我仍然得到同样的错误,但在第20行,现在检查你的分类查询。它能用吗?它是否向categories表中插入数据?是的,它向categories表中添加了一个类别,但我必须为notice_category_id创建一个输入字段,并输入一个不在数据库字段中的INT,我希望它能自动执行此操作,现在我在第20行收到一个错误,但对于notice_user_id和user_id,这意味着notice无法引用根据用户行。因此,约束冲突会增加。当插入通知时,您应该指定user foreing key。您的php文件在底部有表单,posts back to self,但是第一次加载php文件时,可能是为了显示表单,它会执行一个if语句,但紧接着它会执行两次插入,没有设置posts。让我换一种方式说:在显示表单之前插入空格
<input name="notice_id" hidden />
<input name="category_id" hidden />
<input name="notice_id" type="hidden" value="example_value_x" />
<input name="category_id" type="hidden" value="example_value_y" />