Php PDO-对多个foreach循环使用相同的查询

Php PDO-对多个foreach循环使用相同的查询,php,mysql,pdo,foreach,Php,Mysql,Pdo,Foreach,我的代码中有两个foreach循环使用相同的查询,因此我想知道是否可以在页面的开头进行查询,然后在代码中调用它,这样我只需要访问数据库一次。我尝试了这个,第一个循环通过了,但是第二个没有。有没有办法只查询一次,但在两个foreach循环中使用它?这就是我所想的答案: $sql = "SELECT * FROM champs WHERE $role = '1' ORDER BY id"; if (!empty($role)) { $champs = $db->query($sql); }

我的代码中有两个foreach循环使用相同的查询,因此我想知道是否可以在页面的开头进行查询,然后在代码中调用它,这样我只需要访问数据库一次。我尝试了这个,第一个循环通过了,但是第二个没有。有没有办法只查询一次,但在两个foreach循环中使用它?这就是我所想的答案:

$sql = "SELECT * FROM champs WHERE $role = '1' ORDER BY id";
if (!empty($role)) {
$champs = $db->query($sql);
}
一些HTML

更多的HTML

试试这个

    $sql = "SELECT * FROM champs WHERE $role = '1' ORDER BY id";
    if (!empty($role)) {
            $champs = $db->query($sql)->fetchAll(PDO::FETCH_ASSOC);
    }

这将把你的结果转换成一个你可以随意使用的数组。您还必须检查isset$champs或!在使用$champs之前清空它。

定义不工作。你有没有查过var_dump$champs;在第二个循环之前。您是否在第一个循环之后和第二个循环之前使用$champs?@Rikesh不工作,因为当它应该与第一个循环的结果相同时,不会显示任何结果。不,$champs在代码中的任何其他地方都没有使用。此外,var_dump显示objectPDOStatement2 1{[queryString]=>string51 SELECT*FROM champs,其中middle='1'按id排序}
if (!empty($role)) {
foreach($champs as $row) {
     echo   '<div class = "champion_right">
     <p>'.$row['name'].'
      <img class = "face_right" src = "images/small/'.$row['name'].'.png">
      <div class = "name" onmouseover="if(champ2==\'\') preview2(\''.$row['name'].'\', \''.$row['name'].'\')" onmouseout="if(champ2==\'\')restoreAvatar2()" onClick="champ2 = \''.$row['name'].'\'; preview2(\''.$row['name'].'\', \''.$row['name'].'\')">
      </div>
      </p>
    </div>';
}
}
    $sql = "SELECT * FROM champs WHERE $role = '1' ORDER BY id";
    if (!empty($role)) {
            $champs = $db->query($sql)->fetchAll(PDO::FETCH_ASSOC);
    }