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

Posted

技术标签:

【中文标题】PDO - 对多个 foreach 循环使用相同的查询【英文标题】:PDO - using same query for multiple foreach loops 【发布时间】:2014-02-06 07:45:38 【问题描述】:

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

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

一些 html

if (!empty($role)) 
foreach($champs as $row) 
     echo   '<div class = "champion_left">
     <p>'.$row['name'].'
      <img class = "face_left" src = "images/small/'.$row['name'].'.png">
      <div class = "name" onmouseover="if(champ1==\'\') preview1(\''.$row['name'].'\', \''.$row['name'].'\')" onmouseout="if(champ1==\'\')restoreAvatar1()" onClick="champ1 = \''.$row['name'].'\'; preview1(\''.$row['name'].'\', \''.$row['name'].'\')">
      </div>
     </p>
    </div>';


更多 HTML

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>';


【问题讨论】:

定义不起作用。您是否在第二次循环之前检查了var_dump($champs);。您是否在任何地方的第一个和第二个循环之后使用$champs @Rikesh 不起作用,因为当它应该与第一个循环的结果相同时,没有结果显示。不,$champs 没有在代码的其他任何地方使用。此外,var_dump 显示 object(PDOStatement)#2 (1) ["queryString"]=&gt; string(51) "SELECT * FROM champs WHERE middle = '1' ORDER BY id" 【参考方案1】:

试试这个

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

这会将您的结果转换为您可以随意使用的数组。此外,您必须在使用前检查isset($champs)!empty($champs)

【讨论】:

以上是关于PDO - 对多个 foreach 循环使用相同的查询的主要内容,如果未能解决你的问题,请参考以下文章

PDO::bindParam 在 foreach 循环中,所有值都设置为相同吗?

PDO 使用 foreach 绑定 n 次相同的值

带有 PDO::FETCH_ASSOC 的 foreach 循环,提供的参数无效

如何在foreach循环中显示来自PDO的数据

PDO 查询未在 PHP foreach 循环中返回结果

PHP:PDO foreach 不起作用