从PDO查询循环内部循环

时间:2015-05-29 11:24:13

标签: php while-loop

考虑一种情况,你有一个随机行数的mysql表 FLAGS

ID  Language   Flag1               Flag2              Flag3             Flag4 
1   dutch      flanders_flag.png   dutch_flag.png 
2   french     wallonia_flag.png   french_flag.png    morocco_flag.png     
3   english    england_flag.png    ireland_flag.png   america_flag.png  scotland_flag.png

如果我想查询这些行并将它们放入我的html中,我使用while循环,因为我永远不知道这个表 FLAGS 有多少行。

<?php
   $flagquery = $db->prepare ("SELECT * FROM flags");
   $flagquery->execute();
   while ($flagrow = $flagquery->fetch(PDO::FETCH_ASSOC)) {
?>
  <div class="col-md-1 col-sm-2 col-xs-6"> 
    <p><?php echo $flagrow['language']; ?></p>
    <p><?php echo $flagrow['flag1']; ?></p>
    <p><?php echo $flagrow['flag2']; ?></p>
    <p><?php echo $flagrow['flag3']; ?></p>
    <p><?php echo $flagrow['flag4']; ?></p>
  </div>
<?php
  }
?>

但正如您在 FLAGS 表中所看到的那样,您并不总是有4个标志语言,因此我认为您必须在此前一个while循环中执行while循环才能回显 FLAGS 表中存在的标志,而不是仅仅回显所有标志,即使它们是空的。

我的想法是对的吗?或者什么是处理我的情况的最佳方式?

2 个答案:

答案 0 :(得分:1)

不,你不需要第二个循环,你可以使用!empty()。如果变量是空字符串,false,array(),NULL,“0?,0和未设置的变量”,它将返回false。它将在您的情况下有用,如果您允许FLAGS具有NULL值。

<?php
 $flagquery = $db->prepare ("SELECT * FROM flags");
 $flagquery->execute();
 while ($flagrow = $flagquery->fetch(PDO::FETCH_ASSOC)) {
?>
<div class="col-md-1 col-sm-2 col-xs-6"> 
<p><?php echo $flagrow['language']; ?></p>
<?php if(!empty($flagrow['flag1'])) echo '<p>'.$flagrow['flag1'].'</p>'; ?>
 <?php if(!empty($flagrow['flag2'])) echo '<p>'.$flagrow['flag2'].'</p>'; ?>
<?php if(!empty($flagrow['flag3'])) echo '<p>'.$flagrow['flag3'].'</p>'; ?>
<?php if(!empty($flagrow['flag4'])) echo '<p>'.$flagrow['flag4'].'</p>'; ?>
</div>
  <?php
}
?>

答案 1 :(得分:0)

<?php
 $flagquery = $db->prepare ("SELECT * FROM flags");
 $flagquery->execute();
 while ($flagrow = $flagquery->fetch(PDO::FETCH_ASSOC)) {
?>
<div class="col-md-1 col-sm-2 col-xs-6"> 
<p><?php echo $flagrow['language']; ?></p>
<p><?php if($flagrow['flag1']!='') echo $flagrow['flag1']; ?></p>
<p><?php if($flagrow['flag2']!='') echo $flagrow['flag2']; ?></p>
<p><?php if($flagrow['flag3']!='') echo $flagrow['flag3']; ?></p>
<p><?php if($flagrow['flag4']!='') echo $flagrow['flag4']; ?></p>
</div>
  <?php
}
?>

检查变量是否为空,如果不是

则进入