簡體   English   中英

如何從PHP數組插入多個MySQL表行

[英]How to insert multiple MySQL table rows from a PHP array

我對PHP和MySQL還是陌生的,對於當前的專業知識,我有一項非常復雜的任務要做。 它是這樣的:

我正在嘗試用手工制作的CMS創建一個數據驅動的網站,該網站將允許不了解Web設計/ Web開發的用戶來管理它。 當我嘗試創建查詢來處理插入到數據庫中的數據時,就會遇到麻煩。 這是一家書店,我正在向數據庫中插入書籍。 我想創建3個表,一個表用於存儲書籍本身,一個表用於存儲這些書籍所屬的類別(例如文學,神秘,幻想等),並且由於這兩個表之間的關系是多對多關系,我還創建了一個查找表來鏈接這兩個表,使用2列填充了2個代表兩個表ID的外鍵。

問題是我找不到如何在同一列和不同的第二列(類別ID)上插入具有相同ID(書ID)的多行。 將通過復選框以HTML形式選擇類別。 我在這里看到過幾篇文章,我需要在PHP腳本中創建一個數組來存儲用戶選擇的復選框中的數據,但是我絕對不知道如何構造將這些復選框變成多個MySQL表行的查詢。

我見過有人建議內插值,但這會在一行中存儲多個值,還是我弄錯了? 因為這不是我想要的,所以我想要(如果用戶選中了3個類別復選框)在查找表中創建3行。

預先感謝您撥冗看我的問題。

$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);
}

您可以使用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).")";

?>

不,您不能在一個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');

真的很簡單。 首先,將書插入books表中,然后獲取它的ID 假設此示例為ID 5

假設您在復選框中具有以下類別ID: array(21, 42, 64); 現在,您可以構造一個查詢,將其插入到lookup表中:

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

最基本的想法是對提交的類別進行循環,並在查詢表中運行包含類別ID和書籍ID的插入查詢。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM