如何在php mysql中循环遍历列

时间:2017-05-22 20:18:40

标签: php mysqli

想知道是否有人可以指出我正确的方向。

目前我有一个包含多个列的表,其中包含A1,A2,A3等名称,我发现这样做不再适用于我想要使用的新数据库结构。

A1,A2,A3 ..现在将列在实际列中。

我已经包含了当前的代码,用于获取此信息,但我不知道如何遍历A1,A2 ..的列,并获取同一行的信息。

PHP代码:

<?php     
  $i=1;            
  $row = mysqli_fetch_assoc($result);    
  while ($i < 6)    {
      if($row["A".$i.""]=='FREE')        {
          print "<td><p>Available</p></td>";
      }
      else {
               if($row["A$i"]==$auth_user) {
                   echo $i;
                   print"<td><div align=\"center\">".$row["A". $i. ""];
                   print "<br /><p>Cancel</p></span>";
                   print "</div></td>";
               }
               else {
                        print"<td><div align=\"center\">".$row["A". $i. ""];
                        print "</div></td>";
                    }
           }
           $i++;
        }
    }
?>

任何指针都会很棒。

当前表格结构:

Date         | A1   |  A2   ...
---------------------------
2017-05-23   | John |  FREE ...
2017-05-24   | Jack |  FREE ...
2017-05-25   | Jane |  John ...
2017-05-26   | FREE |  Jack ...

新表结构:

Date         | Session   |  User ...
------------------------------------
2017-05-23   | A1        |  John ...
2017-05-23   | A2        |  Jane ...
2017-05-23   | A4        |  John ...
2017-05-23   | A9        |  Jack ...

2 个答案:

答案 0 :(得分:0)

您似乎只尝试处理结果集中的一行数据。如果有多行,则需要为行写一个循环。

如果您使用mysqli_fetch_row(),那么您将获得包含0索引键的结果数组,这将帮助您消除识别特定列名称的需要。至于如何识别Free$auth_user,如果没有为您的问题提供一些示例输入,则无法确定。

我会提供一些假输入用于演示目的:

$auth_user=1;
$row=['something',1,2,'somethingelse','Free'];
// $row = mysqli_fetch_row($result);    

方法:

foreach($row as $v){
    if($v=='Free'){
        echo '<td><p>Available</p></td>';
    }else{
        echo "<td><div align=\"center\">$v";
        if($v==$auth_user){
            echo '<br /><p>Cancel</p>';  // removed closing span tag
        }
        echo '</div></td>';
    }
}

输出:

    <td><div align="center">something</div></td>
    <td><div align="center">1<br /><p>Cancel</p></div></td>
    <td><div align="center">2</div></td>
    <td><div align="center">somethingelse</div></td>
    <td><p>Available</p></td>

请记住,我正在对输入数据做出假设。如果我的示例输入与您正在处理的数据类型不一样,请更新您的问题并留下评论,以便我知道调整我的答案。

答案 1 :(得分:-2)

在$结果集中,您可以调用fetch_field方法,如http://php.net/manual/en/mysqli-result.fetch-field.php

所示
$query = "SELECT Name, SurfaceArea from Country ORDER BY Code LIMIT 5";

if ($result = $mysqli->query($query)) {

    /* Get field information for all columns */
    while ($finfo = $result->fetch_field()) {

        printf("Name:     %s\n", $finfo->name);
        printf("Table:    %s\n", $finfo->table);
        printf("max. Len: %d\n", $finfo->max_length);
        printf("Flags:    %d\n", $finfo->flags);
        printf("Type:     %d\n\n", $finfo->type);
    }
    $result->close();
}

    /* close connection */
    $mysqli->close();

使用方法meta_data http://php.net/manual/en/mysqli-stmt.result-metadata.php

也可以使用语句