2012-02-02 19 views
0

這是我的代碼片段。我基本上有一個我想要插入到表名中的新數組,但在我這樣做之前,我驗證了新數據對舊數據,確認它們是數字並插入到新行中。從foreach驗證檢查中分離mysql_query php

我意識到我做了什麼,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

您是否聽說過關於break關鍵字的內容? – SergeS 2012-02-02 20:11:25

+0

我還沒有那是什麼? – oxymoron 2012-02-02 20:12:00

+0

它會結束循環,所以把它放在你的查詢後(所以它會做一次,然後結束) - 但這種情況意味着你在設計上有錯誤 – SergeS 2012-02-02 20:13:24

回答

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()); 
+0

好吧,如果所有元素都與上週的統計數據匹配或者不是數字,那麼它可能會刪除所有元素。 – oxymoron 2012-02-02 20:20:11

+0

是的,任何不通過該測試的東西都會在mysql語句運行之前從數組中移除 – hackartist 2012-02-02 20:24:23

+0

它看起來並不像我需要的那樣工作,如果所有元素都匹配lastweeks stats或者如果元素不是數字我需要不要將數據插入爲100%錯誤。你的代碼用零代替elemt並繼續插入一個新行。 – oxymoron 2012-02-02 20:27:31