【问题标题】:Foreach not inserting in fields of MySQLForeach 没有插入 MySQL 的字段
【发布时间】:2012-06-08 15:17:16
【问题描述】:

我有一个包含作者、书籍、主题、出版商等的数据库。

在我的一个表单中,我插入了所有书籍信息,其中一个信息是作者(来自数据库)编写了特定书籍。

author 表和 book 表之间存在多对多关系,它们之间的表名为 book_author。我在书本表单中所做的是将从 php 中的 select multiple 选择的作者 ID 与书的 ISBN 一起插入到 book_author 表中,因此每个带有 author_ID 组合的 book_ISBN 在该表中都是唯一的(即使我有没有将组合设置为主键,因为我在该表中没有更多信息)。

问题是我的 foreach 语句只会在数据库中插入一次,而且如果我选择了许多作者(通常超过 2 个),它根本不会插入任何东西。

编辑:作者在select multiple中正确显示

我检查了var_dump() 并且该数组具有正确的 ID,例如在选择 2 个作者后:

array(2) { [0]=> string(1) "3" [1]=> string(1) "2" }

我什至检查了每个查询是否正确生成,同样的例子:

string(77) "INSERT INTO book_author (book_ISBN, author_ID) VALUES ('87979695faae','3')"

string(77) "INSERT INTO book_author (book_ISBN, author_ID) VALUES ('87979695faae','2')"

但问题仍然存在,我不知道该怎么办,这是我的代码:

if (!isset($_POST["authors"])){
        header("Location: addBook.php");        
        exit;
}

var_dump($_POST["authors"]);

$authors = $_POST["authors"];

foreach ($authors as $author) 
{
    $sqlAuthor = "INSERT INTO book_author (book_ISBN, author_ID)
        VALUES ('$isbn','$author')";

    var_dump($sqlAuthor);

    mysql_query($sqlAuthor);
}

我的怀疑是mysql_query($sqlAuthor);,但我不确定...

编辑:我按照说明使用了die 函数,这是我得到的错误

Cannot add or update a child row: a foreign key constraint fails (`library`.`book_author`, CONSTRAINT `FK_written1` FOREIGN KEY (`book_ISBN`) REFERENCES `book` (`book_ISBN`))

【问题讨论】:

  • 您没有遇到任何错误。做mysql_query($sqlAuthor)or die(mysql_error());
  • mysql_query() 是否返回 false

标签: php mysql database insert foreach


【解决方案1】:

错误告诉您出了什么问题:在设置数据库的某个地方,您添加了外键约束,但在尝试插入数据时没有遵守它。我个人建议只删除外键,但如果出于其他原因需要它,那么您将需要更新您的插入以真正注意约束。

【讨论】:

  • 详细说明一下,您有一张桌子“书”。使用外键限制后,如果您使用尚未插入“books”的 isbn,则无法将数据集插入“book_author”
  • 是的,我认为这是问题所在,但现在我改变了代码编译的方式,但我仍然得到同样的错误,我会得到 php 代码首先在 book 表中插入 isbn 吗在 book_author 表中?
  • 我找到了,我把代码的顺序弄错了,现在可以了。谢谢
猜你喜欢
  • 1970-01-01
  • 2018-05-18
  • 1970-01-01
  • 2013-08-11
  • 2018-05-05
  • 1970-01-01
  • 1970-01-01
  • 2015-06-16
  • 1970-01-01
相关资源
最近更新 更多