将mysql_query与foreach验证检查php分开

时间:2012-02-02 20:07:57

标签: php mysql foreach

这是我的代码片段。我基本上我有一个新的数组,我想插入到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();

1 个答案:

答案 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());