首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >while($row = mysql_fetch_row($result))

while($row = mysql_fetch_row($result))
EN

Stack Overflow用户
提问于 2014-05-29 03:46:07
回答 3查看 9.7K关注 0票数 1

我正在尝试让一个php从mysql数据库中提取所有记录,并将它们格式化显示。由于某些原因,第一条记录显示正确,但在其正下方显示的第二条记录没有显示字段名。我做错了什么?

代码语言:javascript
复制
<?php
        $db_host = 'localhost';
        $db_user = 'root';
        $db_pwd = '***';
        $database = 'db';
        $table = 'upstable';
        if (!mysql_connect($db_host, $db_user, $db_pwd))
            die("Can't connect to database");

        if (!mysql_select_db($database))
            die("Can't select database");
        $result = mysql_query("SELECT * FROM {$table}");                              // sending query

        if (!$result) {
            die("Query to show fields from table failed");
        } 
        $fields_num = mysql_num_fields($result);
        while($row = mysql_fetch_row($result))                                        // printing table rows
        {
            $field = mysql_fetch_field($result);
            echo "<div id='column2'><b>{$field->name}:</b></div><div id='column2'>$row[0]</div><br>";
            $field = mysql_fetch_field($result);
            echo "<div id='column'><b>{$field->name}:</b></div><div id='column'>$row[1]</div><br>";
            $field = mysql_fetch_field($result);
            echo "<div id='column2'><b>{$field->name}:</b></div><div id='column2'>$row[2]v</div><br>";
            $field = mysql_fetch_field($result);
            echo "<div id='column'><b>{$field->name}:</b></div><div id='column'>$row[3]</div><br>";
            $field = mysql_fetch_field($result);
            echo "<div id='column2'><b>{$field->name}:</b></div><div id='column2'>$row[4]</div><br>";
            $field = mysql_fetch_field($result);
            echo "<div id='column'><b>{$field->name}:</b></div><div id='column'>$row[5]</div><br>";
            $field = mysql_fetch_field($result);
            echo "<div id='column2'><b>{$field->name}:</b></div><div id='column2'>$row[6]</div><br>";
            $field = mysql_fetch_field($result);
            echo "<div id='column'><b>{$field->name}:</b></div><div id='column'>$row[7]</div><br>";
            $field = mysql_fetch_field($result);
            echo "<div id='column2'><b>{$field->name}:</div></b><div id='column2'>$row[8]</div><br>";
            $field = mysql_fetch_field($result);
            echo "<div id='column'><b>{$field->name}:</b></div><div id='column'>$row[9]</div><br>";
            $field = mysql_fetch_field($result);
            echo "<div id='column2'><b>{$field->name}:</b></div><div id='column2'>$row[10]</div><br>";
            $field = mysql_fetch_field($result);
            echo "<div id='column'><b>{$field->name}:</b></div><div id='column'>$row[11]</div><br>";
            $field = mysql_fetch_field($result);
            echo "<div id='column2'><b>{$field->name}:</b></div><div id='column2'>$row[12]</div><br>";
            $field = mysql_fetch_field($result);
            echo "<div id='column'><b>{$field->name}:</b></div><div id='column'>$row[13]</div><br>";
            $field = mysql_fetch_field($result);
            echo "<div id='column2'><b>{$field->name}:</b></div><div id='column2'>$row[14]</div><br>";
            $field = mysql_fetch_field($result);
            echo "<div id='column'><b>{$field->name}:</b></div><div id='column'>$row[15]</div><br>";
            $field = mysql_fetch_field($result);
            echo "<div id='column2'><b>{$field->name}:</b></div><div id='column2'>$row[16]</div><br>";
            $field = mysql_fetch_field($result);
            echo "<div id='column'><b>{$field->name}:</b></div><div id='column'>$row[17]</div><br><br><br>";
            $row = 0;
        }
        mysql_free_result($result);
        ?>

更新:

差不多修好了,但不太对劲。它使每个完整的数据集合的背景交替( "column2“类是灰色的,"columnn”是白色的),而不是每个集合中的每隔一行。这更有意义吗?

这就是我现在正在使用的,我应该改变什么?

代码语言:javascript
复制
$row_num = 0;

$css_classes[0] = 'column2';
$css_classes[1] = 'column';

while($row = mysql_fetch_assoc($result))
{
    $row_num++;

    $class = $css_classes[$row_num % 2];

    foreach ($row as $col_name => $col_val)
    {
        echo "<div class='$class'><b>{$col_name}:</b></div><div class='$class'>$col_val</div><br>";
    }

echo "<br><br>";
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-29 09:51:26

下面的代码应该可以完美地工作,并且有更多的可靠性。

代码语言:javascript
复制
    while($row = mysql_fetch_assoc($result))
    {
        foreach ($row as $col_name => $col_val)
        {
            echo "<div id='column2'><b>{$col_name}:</b></div><div id='column2'>$col_val</div><br>";
        }

    }

已更新

嗯,我不擅长HTML/CSS。如果我是你的话,我会喜欢这个的。

代码语言:javascript
复制
$row_num = 0;

$css_classes[0] = 'gray_style';
$css_classes[1] = 'white_style';

while($row = mysql_fetch_assoc($result))
{
    $row_num++;

    $class = $css_classes[$row_num % 2];

    foreach ($row as $col_name => $col_val)
    {
        echo "<div id='column2' class='$class'><b>{$col_name}:</b></div><div id='column2'>$col_val</div><br>";
    }

}
票数 3
EN

Stack Overflow用户

发布于 2014-05-29 04:05:35

您只获取第一行(因为$results的默认位置是,这是第一行)。

您显然不了解使用php获取、排序和显示数据的过程,但这里有一个使用mysqli的预准备语句和普通查询的示例。

mysqli查询

代码语言:javascript
复制
function getmarkets()
{
    global $mysqli;
    $query = $mysqli->query("SELECT pair, last_price FROM all_currency_data");
    $num_rows = $query->num_rows;
    if($num_rows > 0) {
        while($row = $query->fetch_assoc())
        {
            $mkt  = explode("-",$row["pair"]);
            $coin = $mkt[0];
            $base = $mkt[1];
            echo '<a class="animate" href="?p=trade&market='.urlencode($row["pair"]).'" style="text-decoration: none;"><li class="mkt-normal" id="'.$row["pair"].'_div">'.$coin.'/'.$base.' <span class="price" id="'.$row["pair"].'_price">'.$row["last_price"].'</span></li></a>';
        }
        $query->close();
    }

}

预准备语句

代码语言:javascript
复制
$stmt = $mysqli->prepare("SELECT user,message,timestamp FROM uc_support_replies WHERE tickethash = ? ORDER BY timestamp ASC");
    $stmt->bind_param('s',$ticket);
    $stmt->execute();
    $stmt->bind_result($user,$message,$timestamp);
    while($stmt->fetch())
    {
        if(in_array($user, $admins)) {
            $color = '0404B4';
        }else{
            $color = '2E2E2E';
        }
        $output .=
        '
        <div class="msgdiv">
        <hr class="five">
        <span class="user_name" style="color:#'.$color.'"><u>'.$user.'</u></span>
        </br>
        <span class="user_message">'.$message.'</span>
        </br>
        <span data-livestamp="'.$timestamp.'">'.$timestamp.'</span>
        <hr class="five">
        </div>
        ';
    }
票数 0
EN

Stack Overflow用户

发布于 2014-05-29 08:30:25

自2012年末PHP5.5.0起,MySQL扩展被正式弃用,并将在未来被删除。推荐的替代方案是MySQLi ("i“代表”改进的“),因为PHP5和更高版本。http://www.php.net/manual/en/book.mysqli.php

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23920560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档