我的问题有点长,我很抱歉。
我使用下面的代码将值添加到我的两个表中,但我还有一个名为book_cover的联结表,我想在此表中添加数据以在book_id和metadata_image_id之间建立连接(因为一本书有多个封面图片),我第一次添加记录时怎么办呢?
即使我读到了关于连接的内容,我也无法建立连接。
我正在使用MySQL和InnoDB。
这是我添加数据的PHP代码:
$stmt = $sqli->prepare("INSERT INTO book(book_original_name, book_publication_date, book_synopsis) VALUES (?,?,?,?)");
$stmt->bind_param("sss", $_POST['book_original_name'], $_POST['book_year'], $_POST['book_synopsis']);
$stmt->execute();
$stmt->close();
$stmt = $sqli->prepare("INSERT INTO metadata_images(metadata_image_value, type, size) VALUES (?,?,?)");
$stmt->bind_param("sss", $name, $_FILES['book_cover']['type'], $_FILES['book_cover']['size']);
$stmt->execute();
$stmt->close();
例如,当我添加id为50且metadata_image的id为92的书时,我还想将book_id和metadata_image_id添加到我的联结表中,以创建特定书和图像之间的关系。我应该用什么样的SQL查询来实现呢?
我的数据库结构:
Table : book
book_id (PK and AI)
book_original_name
book_publication_date
book_synopsis
Table : metadata_images
metadata_image_id (PK and AI)
metadata_image_value
type
size
Junction Table : book_cover
book_id (Foreign key from book)
book_metadata_id (Foreign key from metadata_images)
答案 0 :(得分:2)
如果你知道你刚刚插入了ID为50的图书和ID为92的图像,并且这些图书直接相关(即,该图书的封面上有该图片),那么填充联结表的查询就是简单的:
INSERT INTO book_cover VALUES (50, 92);
联结表没有秘密或特殊查询。诀窍是有效地确定要插入的值;为此,使用MySQL的LAST_INSERT_ID()
函数,您可以通过mysqli API访问mysqli::$insert_id
。
您必须在同一会话中紧跟生成它的INSERT
语句后获取ID。您可以将其保存在用户变量中,执行下一个插入,然后使用第二个表中的插入ID以及从第一个表中保存的ID作为插入到联结表的参数。
在交易中包含所有这些内容是个好主意,这样您就不会只插入部分书籍的信息;要么所有三个查询(或者多个)都应该成功,要么全部都应该失败。