PDO和For Each循环:输出的变量不正确


PDO and For Each Loop: Incorrect variable being output

因此,我为每个循环都有几个循环,并且我试图在最后回显$sql的值。我实际上是在PDO中使用它,但echo说明了这个问题。

$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

如何使其输出所需的输出?你知道如何做到这一点,从而使正确的语句得到响应/运行吗?

它从不回显sql one runs,因为第二个foreach会用sql two runs覆盖它。如果需要在脚本结束时保存sql字符串,可以将它们存储在数组中。由于不清楚$values与SQL的关系,也就是说,哪个SQL应该与哪个$value一起运行,因此很难指定具体方式。

问题是,您首先将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);
}