PHP / MYSQL 插入数组 Foreach 循环

Posted

技术标签:

【中文标题】PHP / MYSQL 插入数组 Foreach 循环【英文标题】:PHP / MYSQL Insert Array Foreach Loop 【发布时间】:2012-06-19 00:12:32 【问题描述】:

这件事让我非常不安,所以我提前感谢您的帮助。似乎有很多关于这个主题的演练,但似乎我可能会为这只猫剥皮有点不同。 . . .

我有一个采购订单表单,我正在使用 javascript 向表中动态添加行并捕获多个行项目的数据。然后我收集数组中每一列的数据。例如,我将“Cust_PN”、“数量”、“价格”作为每个列和数组。 . . Cust_PN[0] Cust_PN[1] 和 Cust_PN[2] 分别用于行项目 1-3。然后我有 Qty[0]、Qty[1] 和 Qty[2] 等等。

我可以让它正确地回显而不会出现问题。但是,当我去发布时,我只会发布上一个条目 *[3] 中的数组数据。

我目前有以下代码/查询。 . .再次感谢任何帮助。

$query1 = "INSERT INTO SO_Items (Timestamp,SO_Num,SO_Rev,SO_Line_Item,Cust_PN,Cust_PN_Rev,My_PN,My_PN_Rev,Description,
  Qty,Sale_Price,UOM,Program,Required_Date) 
  SELECT NOW(),'$SO_Num','$SO_Rev','$SO_Line_Item[$a]','$Cust_PN[$a]','$Cust_PN_Rev[$a]','$My_PN[$a]','$My_PN_Rev[$a]','$Description[$a]','$Qty[$a]','$Sale_Price[$a]','$UOM[$a]','$Program[$a]','$Required_Date[$a]'" or die ('Error posting data');



foreach($Cust_PN as $a => $b) 
  mysql_query($query1);
  

我很确定上面有很多问题。 . .提前谢谢你。

【问题讨论】:

你为什么不从这里开始dev.mysql.com/doc/en 实际错误是什么? “我可以让它正确地回响......”:提到echo在哪里? 【参考方案1】:

foreach 必须在 $query1 之前:

foreach($Cust_PN as $a => $b) 

    $query1 = "INSERT INTO SO_Items (Timestamp,SO_Num,SO_Rev,SO_Line_Item,Cust_PN,Cust_PN_Rev,My_PN,My_PN_Rev,Description,
    Qty,Sale_Price,UOM,Program,Required_Date) 
    VALUES(NOW(),'$SO_Num','$SO_Rev','$SO_Line_Item[$a]','$Cust_PN[$a]','$Cust_PN_Rev[$a]','$My_PN[$a]','$My_PN_Rev[$a]','$Description[$a]','$Qty[$a]','$Sale_Price[$a]','$UOM[$a]','$Program[$a]','$Required_Date[$a]')" or die ('Error posting data');

    mysql_query($query1);

  

【讨论】:

SQL 查询仍然不稳定。已在我的回答中修复。【参考方案2】:

您的主要问题是,在循环外声明 $query。 它使它成为一个常量,并且它也采用值 $a$b,它们是那个时间,未定义,因此导致 SQL 语法无效。

foreach($Cust_PN as $a => $b) 
   $query1 = "INSERT INTO SO_Items (Timestamp, SO_Num, SO_Rev, SO_Line_Item, Cust_PN, Cust_PN_Rev, My_PN, My_PN_Rev, Description, Qty, Sale_Price, UOM, Program, Required_Date) VALUES (NOW(), '$SO_Num', '$SO_Rev', '$SO_Line_Item[$a]', '$Cust_PN[$a]', '$Cust_PN_Rev[$a]', '$My_PN[$a]', '$My_PN_Rev[$a]', '$Description[$a]', '$Qty[$a]', '$Sale_Price[$a]', '$UOM[$a]', '$Program[$a]', '$Required_Date[$a]');";

   $q = mysql_query($query1) or die ('Error posting data');

 

试试看。 也修复了您的 SQL 查询。正确的语法是

INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)

您已将SELECT 替换为VALUES

让我知道它是否有效,否则请告诉我它到底是什么错误。

【讨论】:

甜蜜!将查询放在循环中就可以了。不敢相信它是那么直截了当!我保持 sql 语法不变。 . .我更喜欢dev.mysql.com/doc/refman/5.1/en/insert-select.html 中概述的插入方法,似乎如果我的表发生变化,我不会把表格弄坏。谢谢! 哦,好吧,很有趣。很高兴你让它工作了。 (顺便问一下,你能接受答案吗?)

以上是关于PHP / MYSQL 插入数组 Foreach 循环的主要内容,如果未能解决你的问题,请参考以下文章

PHP Foreach 大数据

php使用foreach将值插入数组数组

php foreach 嵌套循环大数组很慢?

从包含数组的 foreach PHP 插入数据

使用 PHP 数组输出 MySQL 查询 - foreach 循环错误“非法偏移”和“无效参数”

如何对多个 mysql foreach 数组进行排序并需要它们在 php 中保持一致?