【问题标题】:Sending ARRAYS to table as individual submissions将 ARRAYS 作为单独提交发送到表
【发布时间】:2014-02-10 03:49:17
【问题描述】:

我是 PHP 新手。我正在尝试拆分我的数组(成功完成)并将它们作为单独的提交提交到我的 MYSQL 表中(通过 FOR 循环)。但是,使用下面的代码,它只提交数组中的 LAST 对象。从而破坏了所需功能的全部目的。有人可以告诉我避免这种情况的方法吗?

$directives = "(John Doe, Directive, Time)(Jane Doe, Directive2, Time2)";    
$action = explode("(" ,str_replace (")","",$directives));    
    for ($i = 0; $i < count($action); ++$i){
        $newdata = explode("," , $action[$i]);
        $name = $newdata[0];
        $namesplit = explode(" " , $name);

        $actiondo = $newdata[1];
        $date = $newdata[2];

        $sqlaction="INSERT INTO TABLE (Firstname, lastname, Description, Action, date)
    VALUES
    ('$namesplit[0]','$namesplit[1]',' Directive','$actiondo','$date')";

    }

【问题讨论】:

    标签: php arrays for-loop mysqli


    【解决方案1】:

    首先,您必须将实际将数据放入数据库的代码放入循环中,以便进行大量单独的提交。您当前所做的所有代码只是一遍又一遍地设置相同的字符串。这就是为什么只插入最后一个。

    其次,你为什么不只做一个插入?你可以有多个值括号,你知道的。像这样:

     VALUES (x, y, z), (x2, y2, z2), (x3, y3, z3)
    

    第三,您的设计只是在自找麻烦,因为您对数据做出了太多假设。想象一下你的名单中有一个像“James Earl Jones”这样的人。事情是这样的:

    $namesplit = explode(" ", 'James Earl Jones');
    echo $namesplit[0];  // = James
    echo $namesplit[1];  // = Earl
    

    糟糕,现在他的名字只是“詹姆斯·厄尔”。

    为了避免这种事情,你必须在插入数据之前仔细检查数据,并且你真的需要考虑如果每次爆炸时都有多余的逗号或空格会发生什么。

    【讨论】:

      【解决方案2】:

      每次循环迭代都会覆盖$sqlaction 中的查询,因此这没有用。

      您也不需要对每一行进行查询。您可以构建一个查询,允许使用单个查询插入所有行。像这样的:

      $query = 'INSERT INTO TABLE (Firstname, lastname, Description, Action, date)
      VALUES ';
      
      for ($i = 0; $i < count($action); ++$i){
          $newdata = explode("," , $action[$i]);
          $name = $newdata[0];
          $namesplit = explode(" " , $name);
      
          $actiondo = $newdata[1];
          $date = $newdata[2];
          $query .= "('" . $namesplit[0] . "','" . $namesplit[1] . "'Directive','" . $actiondo . "','" . $date . "'),";
      }
      
      $query = rtrim(',', $query);
      // not shown - execute query using $query
      

      【讨论】:

        猜你喜欢
        • 2011-02-18
        • 2016-09-26
        • 2011-07-22
        • 2015-07-18
        • 2016-01-11
        • 2014-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多