如何从php中的mysql_fetch_array()一个接一个地显示所有数据

时间:2015-12-27 12:20:18

标签: php mysql

    $sql="SELECT userId FROM eventmember WHERE eventid='$event_id';";`
    $resultset = mysql_query($sql);
    $row = mysql_fetch_array($resultset); 

我从特定事件列获得了特定的用户ID,例如eventid==> eid-01(us-0, us-3,...)

    $num_row = mysql_num_rows($resultset);
    while($row) {           
      for($i = 0; $i<$num_row; $i++) {          
        $sql = "SELECT userId, firstName FROM userinfo WHERE userId='$row[$i]';";
        $resultset = mysql_query($sql);
        $row22 = mysql_fetch_array($resultset);
        $us_id = $row22['userId'];
        $us_name = $row22['firstName'];

        echo "<tr>";
        echo "<td>ID:</td> <td class='text2' align='center' colspan='2'>
        <b> $us_id </b>
        </u></td>";
        echo "</tr>";
        break;
      }
      $row = mysql_fetch_array($resultset);
    }

在该代码上,我只获得了一个用户ID信息,但是针对一个事件有更多用户ID。

3 个答案:

答案 0 :(得分:3)

首先,使用if语句检查返回的结果集是否包含任何行,如下所示:

if($num_row){
    // your code
}

其次,使用while循环遍历结果集并显示其内容,如下所示:

while($row22 = mysql_fetch_array($resultset)){
    // your code
}

最后,请不要使用mysql_数据库扩展,它们在PHP 5.5.0中已弃用,并已在PHP 7.0.0中删除。请改用mysqliPDO扩展程序。这是why you shouldn't use mysql_ functions

所以你的代码应该是这样的:

<?php
    $sql="SELECT userId FROM eventmember WHERE eventid='$event_id'";
    $resultset = mysql_query($sql);
    $row = mysql_fetch_array($resultset); 

    $num_row = mysql_num_rows($resultset);

    if($num_row){                     
        $sql = "SELECT userId, firstName FROM userinfo WHERE userId='" . $row['userId'] . "'";
        $resultset = mysql_query($sql);
        ?>
        <table>
        <tr>
            <td>User ID</td>
            <td>First Name</td>
        </tr>
        <?php
        while($row22 = mysql_fetch_array($resultset)){
            echo "<tr><td>{$row22['userId']}</td><td>{$row22['firstName']}</td></tr>";
        }
        ?>
        </table>
        <?php
    }
?>

为了更好的可读性,我在表格单元格中显示了数据。

答案 1 :(得分:1)

简单解决方案

您需要从userId表中获取多个eventmember,其中每个事件都有多个用户。但是你只能从$row = mysql_fetch_array($resultset);的查询中获取一次,所以你应该只得到一个用户,你现在得到的是什么。因此,问题是,您实际上已将while循环放在错误的位置。循环应该设置如下:

$sql="SELECT userId FROM eventmember WHERE eventid='$event_id';";
$resultset = mysql_query($sql);
$num_row = mysql_num_rows($resultset);
if($num_row) {
   while($row = mysql_fetch_array($resultset)) {               
       $sql22 = "SELECT userId, firstName FROM userinfo WHERE userId='{$row['userId']}';";
        $resultset22 = mysql_query($sql22);
        $row22 = mysql_fetch_array($resultset22);
        $us_id = $row22['userId'];
        $us_name = $row22['firstName'];

        echo "<tr>";
        echo "<td>ID:</td> <td class='text2' align='center' colspan='2'>
        <b> $us_id </b>
        </u></td>";
        echo "</tr>";
        //You shouldn't use a break here. This will again give you single result only.
   }
}

更好的解决方案

不使用多个查询从userinfo表中获取数据,而是使用JOIN通过一个查询获取所有数据。像这样:

$sql="SELECT u.userId,u.firstName FROM eventmember e JOIN userinfo u ON u.userId = e.userId WHERE e.eventid='$event_id';";
$resultset = mysql_query($sql);
$num_row = mysql_num_rows($resultset);
if($num_row) {
   while($row = mysql_fetch_array($resultset)) {               

        $us_id = $row['userId'];
        $us_name = $row['firstName'];

        echo "<tr>";
        echo "<td>ID:</td> <td class='text2' align='center' colspan='2'>
        <b> $us_id </b>
        </u></td>";
        echo "</tr>";
   }
}

最佳和最安全的解决方案

正如您应该已知的那样,在PHP 7中删除了mysql_*函数,这些函数对您的安全性非常有害。因此,您应该转到PDOmysqli_*功能。我在这里给出一个带有mysqli_*函数的示例,另外我一次获取所有行而不是为每行进行读取,这对性能更好。

//First setup your connection by this way.
$link = mysqli_connect(localhost, "my_user", "my_password", "my_db");
//Now you can use mysqli
$sql="SELECT u.userId,u.firstName FROM eventmember e JOIN userinfo u ON u.userId = e.userId WHERE e.eventid=?;";
$stmt = mysqli_prepare($link, $sql);
$stmt->bind_param('s', $event_id);
$stmt->execute();
$resultset = $stmt->get_result();
$resultArray = $resultset->fetch_all();
$num_row = count($resultArray);
if($num_row) {
   foreach($resultArray as $row) {               

        $us_id = $row['userId'];
        $us_name = $row['firstName'];

        echo "<tr>";
        echo "<td>ID:</td> <td class='text2' align='center' colspan='2'>
        <b> $us_id </b>
        </u></td>";
        echo "</tr>";
   }
}

答案 2 :(得分:0)

mysql_fetch_array()将从结果集中检索单个结果。因此,您需要将其包装在一个循环中以获取每一行/结果。

这是我直接从PHP文档中删除的一个例子:

while ($row = mysql_fetch_array($result)) {
    printf("ID: %s  Name: %s", $row["id"], $row["name"]);
}

在您的情况下,您将在while循环中包装HTML代码。

另一项改进是确保$resultset是一种资源;如果您的查询无效,mysql_query()可以返回false(在INSERTS等其他成功案例中,true可以返回>0。您还可以使用mysql_num_rows()来确定是否要显示mysql_*行(并自定显示&#39;没有返回行&#39; 消息)。

也许更重要的是,PHP {5.5}中不推荐使用mysql_函数,另外在PHP 7.0.0中删除了这些函数。而是MySQLiPDO_MySQL

继续编写 <td > <a ng-href="" ng-click="GetItemDetails(product.Id,window.location.href='/Name')"><b>{{product.Name}}</b></a><br /></td> 代码,您将使自己的升级变得更加困难。同样值得注意的是,5.5还将在6个月内达到安全EOL,让您依靠您的操作系统供应商来支持安全更新。