2012-02-02 71 views
1

所以我對每個循環都有幾個,我試圖在最後回顯$ sql的值。我實際上使用它與PDO,但回聲顯示的問題。PDO和For Each Loop:輸出錯誤的變量

$values = "1,2"; 
$values = explode(',',$values); 

$set1 = "2,4"; 
$set1 = explode(',',$set1); 
$set2 = "3,2"; 
$set2 = explode(',',$set2); 

foreach($set1 as $set1val){ 
    if ($set1val==2) { 
    $sql = "sql one runs";//should run on 1st iteration since 2 will equal 2 
    echo 'hi';//should echo on 1st iteration since 2 will equal 2 
    } 
} 

foreach($set2 as $set2val){ 
    if ($set2val==2) { 
    $sql = "sql two runs";//should run on 2nd iteration since 2 will equal 2 
    echo 'bye';//should echo on 2nd iteration since 2 will equal 2 
    } 
} 

foreach($values as $value){ 
    echo $sql; 
    $stmt = $db->query($sql); 
} 

//The Result Output 
'hi' 'bye' 'sql two runs' 'sql two runs' <-- doesn't echo 'sql one runs' 

//The Output Required 
'hi' 'bye' 'sql one runs' 'sql two runs' <-- Works great, but not outputting this 

我怎樣才能使它輸出所需的輸出?任何想法如何做到這一點,所以正確的語句是回聲/運行?

+0

你在這裏做什麼?循環訪問數組只是爲了爲單個值做某些事情是一種無意義的模式。另外,你是否試圖...動態地決定運行哪個查詢?或者這個代碼應該做什麼? – deceze 2012-02-02 00:39:36

+0

@deceze我認爲我比我應該更復雜的東西。我試圖動態地決定使用同一個變量名運行哪個查詢,希望它能夠考慮到$ sql變量被激活的順序並按順序執行它們,而不是覆蓋之前的運行並運行相同的查詢兩次。這有任何意義嗎? – Wonka 2012-02-02 03:58:56

回答

2

它從不迴響sql one runs,因爲第二個foreachsql two runs覆蓋它。如果您需要在腳本的末尾保存sql字符串,則可以將它們存儲在數組中。很難指定,因爲它不清楚$values與SQL相關的方式,即哪個SQL應與哪一個$value一起運行。

+0

謝謝webbiedave,我已經知道這個問題是什麼,我試圖找到解決方案 – Wonka 2012-02-02 00:36:10

+0

我做到了。我添加了'將它們存儲在一個數組中'。 – webbiedave 2012-02-02 00:39:04

0

的問題是,你先救sql one runs$sql,但你$sql做的下一件事是節約sql two runs,覆蓋以前的值。所以你需要將這些值保存在一個數組中,並修改最後的foreach。像這樣:

foreach($set1 as $set1val){ 
    if ($set1val==2) { 
    $sql[0] = "sql one runs";//should run on 1st iteration since 2 will equal 2 
    echo 'hi';//should echo on 1st iteration since 2 will equal 2 
    } 
} 

foreach($set2 as $set2val){ 
    if ($set2val==2) { 
    $sql[1] = "sql two runs";//should run on 2nd iteration since 2 will equal 2 
    echo 'bye';//should echo on 2nd iteration since 2 will equal 2 
    } 
} 

foreach($sql as $value){ 
    echo $value; 
    $stmt = $db->query($value); 
}