2017-04-19 96 views
0

我是PHP編程新手,但這看起來非常簡單。但是每次運行時都會陷入無限循環。 $facility是一個數組,在我目前的測試size=2中。任何幫助,將不勝感激。看起來好像這個問題不一定是一個無限循環,網頁一直處於持續加載狀態,直到我終止進程,所以我假設了無限循環。簡單的PHP for循環無限

$facility = $_POST['facility']; 

$whereClause = 'WHERE c.residentId = r.residentId AND c.sid = s.id AND p.sid = s.id AND c.createdAt BETWEEN p.effectiveStart AND p.effectiveEnd'; 

if ($facility[0] !== "ALL") { 
    $whereClause = $whereClause.' AND s.facilityAbbr = "'.$facility[0].'"'; 

    $size = sizeof($facility); 
    for($i = 1; $i< $size; $i++) 
    { 
    $whereClause = $whereClause.' OR c.facilityAbbr = "'.$facility[$i].'"'; 
    } 
} 
+3

你有沒有使用'認爲」 ... WHERE c.facilityAbbr IN( ' 「.implode(」',「」,$機構[$ i])。 」')「'? (假設正確的轉義/處理/將作爲準備好的查詢完全更好) –

+0

這是您正在運行的確切代碼嗎?我不認爲這個循環是無限的。 –

+0

絕對不是無限循環。此外,數組以'0'開頭 – nerdlyist

回答

0

你會想確保你的字符串變量在連接到它之前被初始化。

$whereClause = ''; 
$size = sizeof($facility); 
for($i = 1; $i<$size; $i++) { 
    $whereClause .= ' OR c.facilityAbbr = "'.$facility[$i].'"'; 
} 

正如我所提到的詮釋他評論,如何縮短線,我會在這裏發佈它,使它更有意義。

此外,請注意,這是一個無限循環的唯一方法是如果$facility是一個數組中有無限項目,這是可疑的。你可能想打開錯誤報告,把它放在代碼之前的某處。

ini_set('display_errors', 1); 

您也可以使用Foreach循環,這是更合適的IMO和更少的代碼。

$whereClause = ''; 
foreach($facility as $item){ 
    $whereClause .= ' OR c.facilityAbbr = "'.$item.'"'; 
}