[英]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.