如何从PHP数组中插入多个MySQL表行

时间:2014-02-27 09:36:18

标签: php mysql sql database

我是PHP和MySQL的新手,我有一个非常复杂的任务要做我目前的技术诀窍。它是这样的:

我正在尝试使用手工制作的CMS创建一个数据驱动的网站,该网站将允许不了解网页设计/网站开发的用户来管理它。我遇到的问题是当我尝试创建查询来处理插入数据库的数据时。这是一家书店,我正在数据库中插入书籍。我想创建3个表,一个用于存储书本身,一个用于存储这些书所属的类别(文学,神秘,幻想等),并且由于这两个表之间的关系是多对多的关系,我还创建了一个查找表来链接这两个,使用2个列填充2个外键,表示两个表的ID。

问题是我找不到如何在一列和不同的第二列(类别ID)上插入具有相同ID(书籍ID)的多个行。将通过复选框在HTML表单中选择类别。我在这里的几个帖子中看到我需要在PHP脚本中创建一个数组来存储用户选择的复选框中的数据,但我完全不知道如何构造查询,将这些复选框转换为多个MySQL表行

我见过有人建议破坏这些值,但这会在一行中存储多个值,还是我错了?因为那不是我想要的,我想(如果用户选中3个类别复选框)在查找表中创建3行。

提前感谢您抽出时间查看我的问题。

5 个答案:

答案 0 :(得分:0)

$categories = array(1,2,3,4);
$bookId = 5;

foreach ($categories as $categoryId) {

    $data = array(
        'book_id' => (int)$bookId,
        'category_id' => (int)$categoryId
    );

    $query = "INSERT INTO `lookup` SET ";
    $fields = array();
    foreach ($data as $field => $value) {
        $fields[] = "`$field` = '$value'";
    }
    $fields = implode(', ', $fields);
    $query .= $fields;

    mysql_query($query);
}

答案 1 :(得分:0)

您可以使用implode构建插入以插入许多行。这样的事情: -

<?php

$Category = 123;

$Books = array(1,2,3,4,5,6,7,8,9,10);

$sql = "INSERT INTO book_category_link(NULL, category_id, book_id)
        VALUES ($Category".implode("),($category", $Books).")";

?>

或者如果你想使用现有的表来获取id,那么就像这样: -

<?php

$Category = (123, 456, 789);

$Books = array(1,2,3,4,5,6,7,8,9,10);

$sql = "INSERT INTO book_category_link(NULL, category_id, book_id)
        SELECT NULL, categories.id, books.id
        FROM books
        CROSS JOIN categories
        WHERE books.id IN (".implode(",", $Books).")
        AND categories.id IN (".implode(",", $Category).")";

?>

答案 2 :(得分:0)

不,您无法在一个MySQL命令中插入多个表。但是,您可以使用交易。

INSERT ...
SELECT LAST_INSERT_ID() INTO @mysql_variable_here;
INSERT INTO table2 (@mysql_variable_here, ...);
INSERT INTO table3 (@mysql_variable_here, ...);

如果要添加多行插入,则可以使用语法

INSERT INTO  table (col1, col2) VALUES ('value', 'value'), (value, 'value');

答案 3 :(得分:0)

这很简单。首先,将书籍插入books表格,然后get the ID of it。我们假设这个例子是ID 5

假设您从复选框中获得以下类别ID:array(21, 42, 64); 现在,您可以构建一个这样的查询,将它们插入到lookup表中:

INSERT INTO `lookup` (book_id, category_id') VALUES (5, 21), (5, 42), (5, 64);

答案 4 :(得分:0)

最基本的想法是迭代所提交类别的循环,并在查找表中运行包含类别ID和书籍ID的插入查询。

$bookID= $_POST['bookid'];
foreach ($categories as $category) {

    mysql_query("INSERT INTO lookup(bookid,categoryid) values($bookID,$catetory)");
}