0

皆様こんばんは!

何らかの理由で Database::fetchArray() がクエリ結果セットの最初の $row をスキップしています。

それはすべての行を適切に出力しますが、何らかの理由で最初の行だけを見逃し続けます。私の fetchArray() 関数に何か問題があると思いますか?

phpMyAdmin でクエリを実行すると、4 行が返されました。php ファイル (以下のコード) を使用してローカルホストで試したところ、もちろん同じ 'WHERE tunes.riddim' 値を使用して 3 行しか出力されませんでした。Google のほとんどの同様のトピックは、よくある間違いが while() の前に mysql_fetch_array() を使用することであることを示しています。これにより、ポインターが先に設定され、最初の行が失われます。 while()-頭)。

<?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;
}

どんな提案でも大歓迎です!

4

3 に答える 3

3

-1forループから削除する必要があります

于 2012-09-11T22:33:46.200 に答える
0

単純なforeachを使用することもできます:

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

コードも読みやすくなります。

于 2012-09-11T22:35:07.713 に答える
0

問題はwhileループにあります:

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

が1の場合count ($ar)、エントリが1つあるため、ループが呼び出されることはありません。チェック部分を微調整してみてください:

for($i = 0; $i < count($ar) ; $i++) 
于 2012-09-11T22:35:45.023 に答える