MySQL数据FOR循环


<?php
//function to create a table
function makeTable($table, $columns){
    $numFields = count($columns)-1;
    $query = 'SELECT * FROM '.$table;
    $result = mysql_query($query);
    $arrayResult = mysql_fetch_array($result);
    $num_rows = mysql_num_rows($result);
    for ($x = 1; $x <= $num_rows; $x++){ //1st for loop
        echo '<tr>';
            for ($i = 0; $i <= $numFields; $i++){ //2nd for loop
                echo '<td>'.$arrayResult[$columns[$i]].'</td>';
            }
        echo '</tr>';
    }
}

?>

$columns是用户输入的数组,例如:$columns = array ('Column1', 'Column2', 'Column3);这些是给定$表中列的名称。

我的想法是创建一个函数来显示MySQL表中的数据和来自$columns数组的信息。问题出在第二个for循环中。$i的值在每次完成第一个循环时被重置,所以我一次又一次地得到相同的结果(表中的行数)。我的问题是:我如何保持$ I在第二个循环从重置?

提前感谢。

反复得到相同结果的原因不是因为$i,而是$arrayResult

正确的方法是这样的:

//function to create a table
function makeTable($table, $columns){
    $numFields = count($columns)-1;
    $query = 'SELECT * FROM '.$table;
    $result = mysql_query($query);
    while ($arrayResult = mysql_fetch_array($result)){
        echo '<tr>';
            for ($i = 0; $i <= $numFields; $i++){ //2nd for loop
                echo '<td>'.$arrayResult[$columns[$i]].'</td>';
            }
        echo '</tr>';
    }
}

在您的代码中,您总是简单地获取第一行,无论后续循环如何,您只处理第一行。

放置

 $arrayResult = mysql_fetch_array($result);

在echo '<tr>'之前的第一个循环内;

无论如何,for不是迭代表记录的最佳选择,请考虑使用while。

为什么不使用while循环?如果你使用的时候,你甚至不需要mysql_num_rows($result)。试试这个

function makeTable($table, $columns){
    $numFields = count($columns)-1;
    $query = 'SELECT * FROM '.$table;
    $result = mysql_query($query);
    while($arrayResult = mysql_fetch_array($result)){
        echo '<tr>';
            for ($i = 0; $i <= $numFields; $i++){ //2nd for loop
                echo '<td>'.$arrayResult[$columns[$i]].'</td>';
            }
        echo '</tr>';
    }
}

我相信,你会得到你的ans

  1. 你的代码永远不会工作。因为你没有读取mysql_fetch_array()

  2. 的手动条目
  3. 现在for循环已经没有用了。您需要一些手册来了解如何在PHP中处理循环。当你需要更多的时间时,你需要更多的时间。

  4. 创建这种函数的想法是错误的。在一个函数中结合SQL和HTML是一个非常糟糕的设计。你真正需要的是一个函数来获取SQL数据到数组和一个模板。

函数
function sqlArr($sql){
  $ret = array();
  $res = mysql_query($sql) or trigger_error(mysql_error()." ".$sql);
  if ($res) {
    while($row = mysql_fetch_array($res)){
      $ret[] = $row;
    }
  }
  return $ret;
}

代码
$data = sqlArr("SELECT * FROM table");
include 'template.php';

模板
<table border='1'>
<? foreach ($data as $row): ?>
  <tr>
  <? foreach ($row as $col): ?>
    <td><?=$col?></td>
  <? endforeach ?>
  </tr>
<? endforeach ?>
</table>

但是,如果你经常使用它,你可以将后一个模板代码放入函数中。
命名为

<? drawTable($data) ?>

最新更新