将ARRAYS作为单独提交发送到表

时间:2014-01-20 20:03:36

标签: php arrays for-loop mysqli

我是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')";

    }

2 个答案:

答案 0 :(得分:1)

您在$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

答案 1 :(得分:0)

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

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

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

第三,你的设计只是在惹麻烦,因为你对数据做了很多假设。想象一下,你的名单中有一个像“詹姆斯厄尔琼斯”的人。这是怎么回事:

$namesplit = explode(" ", 'James Earl Jones');
echo $namesplit[0];  // = James
echo $namesplit[1];  // = Earl
哎呀,现在他的名字就是“詹姆斯伯爵”。

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