【问题标题】:MySQL/PHP mysql_fetch_array() keeps missing first rowMySQL/PHP mysql_fetch_array() 一直丢失第一行
【发布时间】:2012-09-04 22:11:56
【问题描述】:

大家晚安!

由于某种原因,Database::fetchArray() 正在跳过查询结果集的第一行。

它正确打印所有行,只是由于某种原因一直错过第一行,我认为我的 fetchArray() 函数有问题?

我在 phpMyAdmin 中运行了查询,它返回了 4 行,当我在本地主机上使用 php 文件(下面的代码)尝试它时,它只打印了 3 行,当然使用相同的“WHERE tunes.riddim”值。 google 上的大多数类似主题表明,一个常见的错误是在 while() 之前使用 mysql_fetch_array(),这会将指针提前并导致第一行丢失,不幸的是我只有一个 mysql_fetch_array() 调用(在while()-head)。

<?php 

    $db->query("SELECT " .
                "riddims.riddim AS riddim, " .
                "riddims.image AS image, " .
                "riddims.genre AS genre, " .
                "tunes.label AS label, " .
                "tunes.artist AS artist, " .
                "tunes.tune AS tune, " .
                "tunes.year AS year," .
                "tunes.producer AS producer " .
                "FROM tunes " . 
                "INNER JOIN riddims ON tunes.riddim = riddims.riddim " .
                "WHERE tunes.riddim = '" . mysql_real_escape_string(String::plus2ws($_GET['riddim'])) . "'" .
                "ORDER BY tunes.year ASC");

    $ar = $db->fetchArray();

    for($i = 0; $i < count($ar) - 1; $i++)
    {
        echo $ar[$i]['riddim'] . " - " . $ar[$i]['artist'] . " - " . $ar[$i]['tune'] . " - " . $ar[$i]['label'] . " - " . $ar[$i]['year'] . "<br>";
    }

?>

Database::fetchArray() 看起来像:

public function fetchArray()
{

    $ar = array();

    while(($row = mysql_fetch_array($this->result)) != NULL)
        $ar[] = $row;

    return $ar;
}

任何建议表示赞赏!

【问题讨论】:

  • 是的,你没有错过第一行,而是最后一行..
  • 您需要在for($i = 0; $i &lt;= (count($ar) - 1); $i++)for($i = 0; $i &lt; count($ar); $i++) 之间进行选择,但不要摇晃它们:-)

标签: php mysql arrays row fetch


【解决方案1】:

您应该从 for 循环中删除 -1

【讨论】:

  • 哦,天哪...我之前摆弄了 for 循环并更改了停止标准。我想我可以再花 3 个小时查看错误的函数来寻找错误。谢谢!
【解决方案2】:

问题出在你的 while 循环中:

for($i = 0; $i < count($ar) - 1; $i++) 

如果count ($ar) 为1,因为只有一个条目,你的循环将永远不会被调用;尝试调整检查部分:

for($i = 0; $i < count($ar) ; $i++) 

【讨论】:

    【解决方案3】:

    你也可以使用简单的foreach:

    foreach($db->fetchArray() as $row)
    {
            echo $row['riddim'] # ...
    }
    

    它也会使您的代码更具可读性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-17
      • 1970-01-01
      • 2013-11-19
      • 1970-01-01
      • 2012-08-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      相关资源
      最近更新 更多