【问题标题】:sql insert using nested foreach repeats data insertion into the table使用嵌套foreach的sql插入重复数据插入到表中
【发布时间】:2013-09-17 05:53:00
【问题描述】:

我尝试使用嵌套的 foreach 插入输入字段数组。如果我为一个字段提供一个值,它工作正常,但如果我提供多个字段,则插入操作重复 8 次

PHP:

if ($_POST['fields']) {
  //get last inserted userid
  $inserted_user_id =mysql_insert_id(); 
  //Loop through added fields
  foreach ( $_POST['fields'] as $key=>$value ) {
    foreach ( $_POST['fields1'] as $key=>$value1 ) {
      foreach ( $_POST['fields2'] as $key=>$value2 ) {
        foreach ( $_POST['fields3'] as $key=>$value3 ) {
          $inserted_website_id = 1;
          //Insert into users_websites_link table
      $sql_users_website = sprintf("INSERT INTO users_websites_link 
        (UserID, CameraID,make, model ,serial,description2) VALUES
            ('%s','%s','%s','%s','%s','%s')",
            mysql_real_escape_string($inserted_user_id),
            mysql_real_escape_string($inserted_website_id),
            mysql_real_escape_string($value),
            mysql_real_escape_string($value1),
            mysql_real_escape_string($value2),
            mysql_real_escape_string($value3) );  
            $result_users_website = mysql_query($sql_users_website);
          }
        }
      }
    }
  }
  else {
    //No additional fields added by user
  }

输入:

1.Make:cam 型号:mac 序列号:rak 2.Make:cam 型号:mac 串口:dam

但是得到的结果是

【问题讨论】:

  • 您有 4 个循环,每个循环不仅会执行自身的迭代次数,还会执行与周围循环相同的次数。这不是不寻常的行为。
  • 请注意 mysql_* 函数已被弃用,您应该使用 mysqli_* 函数或 PDO。 Here is some more information.

标签: php sql foreach nested


【解决方案1】:

试试:

foreach ( $_POST['fields'] as $key=>$value ) {
    $value1 = $_POST['fields1'][$key];
    $value2 = $_POST['fields2'][$key];
    $value3 = $_POST['fields3'][$key];


    $inserted_website_id = 1;


    //Insert into users_websites_link table
    $sql_users_website = sprintf("INSERT INTO users_websites_link (UserID, CameraID,make, model ,serial,description2) VALUES ('%s','%s','%s','%s','%s','%s')",
                           mysql_real_escape_string($inserted_user_id),
                           mysql_real_escape_string($inserted_website_id),
                           mysql_real_escape_string($value),
                            mysql_real_escape_string($value1),
                            mysql_real_escape_string($value2),
                            mysql_real_escape_string($value3) );  
    $result_users_website = mysql_query($sql_users_website);
}

【讨论】:

  • 它只插入一个字段值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-18
  • 1970-01-01
相关资源
最近更新 更多