Php 在一个查询中插入带有值的SELECT

Php 在一个查询中插入带有值的SELECT,php,mysql,Php,Mysql,MYSQL和PHP有点新-我有以下代码,将在我设置的多个表中创建一个新记录,但是我需要以某种方式将以下代码合并在一起,因为它会创建单独的行,而不是一个记录 $sql .=("INSERT INTO orders (customer_id) SELECT customer_id FROM customer_details;"); foreach($result as $item){ $mysql_desc = $item['product_description']; $mysql_m

MYSQL和PHP有点新-我有以下代码,将在我设置的多个表中创建一个新记录,但是我需要以某种方式将以下代码合并在一起,因为它会创建单独的行,而不是一个记录

$sql .=("INSERT INTO orders (customer_id) SELECT customer_id FROM 
customer_details;");    

foreach($result as $item){
$mysql_desc = $item['product_description'];
$mysql_mode = $item['delivery_mode'];
$mysql_cost = $item['course_cost'];
$sql .=("INSERT INTO orders(product_description, delivery_mode, course_cost) VALUES('$mysql_desc', '$mysql_mode', '$mysql_cost');");
}
我得到的结果是:


基于您的数据,我假设您希望将客户id和php中的值插入到同一记录中。在这种情况下,您需要将它们组合成相同的
insert。。。选择…
语句:

$sql .=("INSERT INTO orders(customer_id, product_description, delivery_mode, course_cost) select customer_id, '$mysql_desc', '$mysql_mode', '$mysql_cost' from customer_details;");
有几件事需要注意:

  • 这个
    插入。。。选择…
    语句将为客户详细信息表中的所有客户插入相同的记录。我不确定这是否是你的最终目标

  • 请考虑对旧MySQL API的注释和准备语句的使用建议。


    为了使这一点更符合我的预期,我使用了-prepare语句,然后循环遍历每个项并添加新行

    $insert = $connection->prepare("INSERT INTO orders (customer_id,product_description, delivery_mode, course_cost)
    VALUES (?,?,?,?)");    
    
    foreach($result as $item){
        $customerID = 1; // Have to ensure this is what your after
        $mysql_desc = $item['product_description'];
        $mysql_mode = $item['delivery_mode'];
        $mysql_cost = $item['course_cost'];
        $insert->execute([customerID,mysql_desc,mysql_mode,mysql_cost]);
    }
    

    现在是阅读准备好的和装订好的声明的好时机。我不知道这些记录中哪一个应该有问题,如果有的话。我强烈建议你在这里使用事先准备好的声明。这将消除
    INSERT
    查询中的许多潜在不确定性。草莓的评论被高估了,很遗憾我只能做一次。请给我们一个
    print\r($sql)foreach后的结果-要查看完整查询,请尽快切换到mysqli。我需要记录53有一个产品说明,交付模式和课程成本。目前我可以得到一个而没有另一个。而且
    mysqli\u query
    不能使用multiply语句!这就是我想要的结果。那你为什么取消接受?嘿,还没有试过奈杰尔的答案,对不起,我要跳枪了。威尔说,这个代码适用于其他人阅读的问题。与这部分代码无关,我在第一次提交时得到了一个正常的条目,但是在第二次提交时结果页面上出现了一个意外的循环。当前,我希望customerID等于的值来自另一个名为customer_details的表中的自动递增“customer_id”-是否知道如何将其包括在foreach循环中?取决于此数字的生成方式,是否可以执行
    选择
    操作,或者是否先插入此行。如果您查看了后一个,请在进入循环之前获取它(因为插入可能会更改值),然后如上所述设置它。