2015-04-16 46 views
0

我在通過mysql生成的數組搜索時遇到了一些麻煩。我有以下代碼:循環瀏覽mysql的結果

if($result=$link->query("select s_abbreviation from northwoods.state")) { 
if($result->num_rows) { 
    while($row=$result->fetch_assoc()) { 
     if(!preg_match("/".$STATE."/", $row['s_abbreviation'])) { 
     $error=true; 
     echo "Please enter a valid two letter state abbreviation for the state that your address is located in!"; 
     } 
    } 
    } 
} 

結果數組有59行,我試圖將$ STATE模式的行中的至少一個匹配,否則迴應一個錯誤。問題是它匹配59行中的1行,但仍然回聲58錯誤,因爲它無法匹配其他58行。有沒有一種方法或修飾符,我可以使用,以便它搜索所有的行,如果它發現一個匹配,然後沒有錯誤發送?

+0

爲什麼不把它放在'where子句中的查詢中?即'where s_abbreviation ='$ STATE'' –

+0

like where $ STATE in(s_abbreviation)?然後我可以檢查返回的行數,如果0則回顯錯誤,如果1則接受條目。我會盡力的,謝謝! –

+0

當然,你可以使用'IN()'或'FIND_IN_SET()',這取決於你的數據庫是如何設置的。我編輯我的評論以上btw,舉一個例子,但可能不是你想要的。 –

回答

1

即使你的代碼是不是「流血的邊緣」,這裏是做什麼來解決它:

if($result=$link->query("select s_abbreviation from northwoods.state")) { 
    if($result->num_rows) { 
     while($row=$result->fetch_assoc()) { 
      if(!preg_match("/".$STATE."/", $row['s_abbreviation'])) { 
       $error=true; 
      } 
     } 
    } 
} 
if ($error) { 
    echo "Please enter a valid two letter state abbreviation for the state that your address is located in!"; 
} else { 
    echo "OK"; 
} 
3

試試吧

if($result=$link->query("select s_abbreviation from northwoods.state")) { 
    if($result->num_rows) { 
     $error = true; 
     while($row=$result->fetch_assoc()) { 
      if(preg_match("/".$STATE."/", $row['s_abbreviation'])) { 
       $error = false; 
      } 
     } 

     if($error) { 
      echo "Please enter a valid two letter state abbreviation for the state that your address is located in!"; 
     } 

    } 
} 

讓我知道,如果有任何問題。

+0

謝謝,運作良好。 –