2012-02-02 8 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

+0

@deceze私は私が持っているよりも何かを複雑にしていたと思う。私は、同じ変数名を使用して実行するクエリを動的に決定しようとしていました。$ SQL変数がアクティブ化された順序を考慮して、その前の実行を上書きして同じクエリを2回実行します。それは意味をなさないでしょうか? – Wonka

答えて

2

sql one runsの場合は、foreachsql two runsで上書きされるため、決してエコーしません。スクリプトの最後までSQL文字列を保存する必要がある場合は、配列に格納できます。 $valuesがSQLにどのように関係しているか、すなわちどのSQLをどの$valueで実行するかが明確でないため、どのように指定するのは難しい。

+0

ありがとうwebbiedave、私はすでに問題が何であるか知っています、私は解決策を見つけることを試みています – Wonka

+0

私はしました。私は 'それらを配列に格納する 'を追加しました。 – webbiedave

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); 
} 
関連する問題