我是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')";
}
答案 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
哎呀,现在他的名字就是“詹姆斯伯爵”。
为了避免这种情况,你必须在插入之前仔细检查数据,你真的需要考虑如果每次爆炸时都有额外的逗号或空格会发生什么。