Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将数组作为单个提交发送到表_Php_Arrays_For Loop_Mysqli - Fatal编程技术网

Php 将数组作为单个提交发送到表

Php 将数组作为单个提交发送到表,php,arrays,for-loop,mysqli,Php,Arrays,For Loop,Mysqli,我是PHP新手。我正在尝试拆分我的数组(成功完成),并将它们作为单独的提交提交到我的MYSQL表中(通过FOR循环)。但是,使用下面的代码,它只提交数组中的最后一个对象。从而破坏了预期功能的整体目的。有谁能告诉我避免这种情况的方法吗 $directives = "(John Doe, Directive, Time)(Jane Doe, Directive2, Time2)"; $action = explode("(" ,str_replace (")","",$directives)

我是PHP新手。我正在尝试拆分我的数组(成功完成),并将它们作为单独的提交提交到我的MYSQL表中(通过FOR循环)。但是,使用下面的代码,它只提交数组中的最后一个对象。从而破坏了预期功能的整体目的。有谁能告诉我避免这种情况的方法吗

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

    }
$directives=“(约翰·多伊,指令,时间)(简·多伊,指令2,时间2)”;
$action=explode(“(”,str_replace(“)”,“,$directions));
对于($i=0;$i
每次循环迭代都会覆盖
$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
$query='插入到表中(Firstname、lastname、Description、Action、date)
价值观;
对于($i=0;$i
首先,您必须将实际将内容放入数据库的代码放入循环中,以便进行大量的单独提交。您的代码当前所做的只是反复设置相同的字符串。这就是为什么只插入最后一个

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

 VALUES (x, y, z), (x2, y2, z2), (x3, y3, z3)
第三,你的设计只是自找麻烦,因为你对你的数据做了太多的假设。想象一下,在你的名单上有一个像“詹姆斯·厄尔·琼斯”这样的人。下面是它的运行方式:

$namesplit = explode(" ", 'James Earl Jones');
echo $namesplit[0];  // = James
echo $namesplit[1];  // = Earl
哦,现在他的名字只是“詹姆斯·厄尔”

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