从多个值运行插入脚本

问题描述 投票:1回答:2

我正在尝试运行一个非常简单的脚本来执行以下操作:获取内容模块的ID并将其分配给多个位置

所以说我点击ID为123的内容模块上的链接,我想将其分配给所有多个位置。在SQL中,我只想说:

INSERT INTO table (cont_id,loc_id) 
VALUES (123, select(id from location_table where active = 1))

我目前正在使用这个:

$pageID = $_GET['pageID'];

$assignPage = "
INSERT INTO locationContent(page_id, display_id)
    VALUES ( '$pageID', select(id from locations where active = 1))
    ON DUPLICATE KEY UPDATE active = 1
";

$performAssign = $mysqlConn->query($assignPage);

我想知道的问题是,我需要把它放到foreach或while循环中吗?如果我按原样运行,我觉得这只适用于一条记录

php mysql sql
2个回答
1
投票

你不能混合INSERT INTO .. VALUESINSERT INTO ... SELECT语法,但SELECT constant, var FROM ..可能像:

$assignPage = $mysqlConn->prepare("
INSERT INTO locationContent(page_id, display_id)
    SELECT :page as page_id, id FROM locations WHERE active = 1
    ON DUPLICATE KEY UPDATE active = 1
";

$performAssign = $assignPage->execute(array('page' =>$pageID));

2
投票

你似乎在寻找MySQL INSERT ... SELECT syntax

从文档:

使用INSERT ... SELECT,您可以从SELECT语句的结果中快速地将许多行插入到表中,该语句可以从一个或多个表中进行选择。

查询:

INSERT INTO locationContent (page_id, display_id)
SELECT ?, id FROM locations WHERE active = 1
ON DUPLICATE KEY UPDATE active = 1

?代表参数$pageID(您确实希望使用参数化查询和预准备语句来保护您的代码免受SQL注入)。

© www.soinside.com 2019 - 2024. All rights reserved.