MySQL/PHP MySQL_fetch_array()一直缺少第一行


MySQL/PHP mysql_fetch_array() keeps missing first row

大家晚上好!

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

它正确地打印了所有行,只是出于某种原因一直遗漏了第一行,我想我的fetchArray()函数有问题吗?

我在phpMyAdmin中运行了查询,它返回了4行,当我在本地主机上用php文件(下面的代码)尝试它时,它只打印了3行,当然使用了相同的"WHERE tunes.riddim"值。谷歌上大多数类似的主题都表明,一个常见的错误是在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>";
    }
?>

数据库::fetchArray()看起来像:

public function fetchArray()
{
    $ar = array();
    while(($row = mysql_fetch_array($this->result)) != NULL)
        $ar[] = $row;
    return $ar;
}

欢迎提出任何建议!

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

问题在while循环中:

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

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

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

您还可以使用一个简单的foreach:

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

它也会让你的代码可读性更强。