PDO и для каждого цикла: выводится неверная переменная - PullRequest
1 голос
/ 02 февраля 2012

Так что у меня есть несколько для каждого цикла, и я пытаюсь отобразить значение $ sql в самом конце. Я на самом деле использую его с PDO, но эхо демонстрирует проблему.

$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

Как я могу заставить его выводить требуемый вывод? Любая идея, как сделать это так, чтобы правильное утверждение было отражено / работает?

Ответы [ 2 ]

2 голосов
/ 02 февраля 2012

Он никогда не повторяет sql one runs, потому что второй foreach перезаписывает его sql two runs.Если вам нужно сохранить строки sql до конца скрипта, вы можете сохранить их в массиве.Трудно определить, как, поскольку неясно, как $values связан с SQL, т. Е. Какой SQL должен работать с каким $value.

0 голосов
/ 02 февраля 2012

Проблема в том, что вы сначала сохраняете 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);
}
...