这是我的代码片段。我基本上我有一个新的数组,我想插入到tablename中,但在我这样做之前,我会根据旧数据验证新的统计数据,确认它们是数字并插入新行。
我意识到我做了什么,mysql_query在foreach循环中,它插入5行完全相同。我希望它只插入1个新行。
如何在循环外部使用mysql_query,并在尝试插入新行之前保留foreach循环提供的验证?
foreach ($statnumber as $element) {
if ($statnumber != $LastWeeksStats && is_numeric($element)) {
mysql_query("INSERT INTO tablename (idproducts, stat1, stat2, stat3, stat4, stat5, superstat1) VALUES('8', '$statnumber[0]', '$statnumber[1]', '$statnumber[2]', '$statnumber[3]', '$statnumber[4]', '$statnumber[5]')") or die(mysql_error());
} else {
echo "'{$element}' is NOT numeric or results same as last week", PHP_EOL;
}}
mysql_close();
答案 0 :(得分:0)
我会从数组中删除未通过检查的元素,然后在结束时在循环外部使用mysql语句。使用未设置但您必须跟踪要取消设置的键:
foreach ($statnumber as $key => $element) {
if($statnumber != $LastWeeksStats && is_numeric($element)) {
//do nothing because it is valid
} else {
//remove that element from the array
unset($statnumber[$key]);
echo "'{$element}' is NOT numeric or results same as last week", PHP_EOL;
}
}
//now only valid data is in the array and you can use a mysql query
你必须根据最后数组中实际有多少元素来更新mysql查询,如下所示:
foreach($statnumber as $key => $element) {
$keys[] = "stat$key";
$elements[] = "'$element'";
}
$keystring = implode(",",$keys);
$elementstring = implode(",",$elements);
mysql_query("INSERT INTO tablename (idproducts, $keystring, superstat1) VALUES('8', $elementstring)") or die(mysql_error());