反转mysql_fetch_array()

时间:2009-03-30 07:51:06

标签: php mysql

function outputscores($mysqlquery,$reverse=false)
{
    while($row = mysql_fetch_array($mysqlquery))
    {
        echo '<img src="img/date.png" /> ' . date("j M Y",strtotime($row['timestamp'])) . '
        <img src="img/time.png" /> ' . date("H:i:s",strtotime($row['timestamp'])) . '
        <img src="img/star.png" /> '.$row['score'].$_GET["scoretype"].'<br />';
    }
}

如果$ reverse设置为true,我需要反转数组,但PHP表示mysql_fetch_array的输出不是有效数组。也不是$ mysqlquery本身。

有任何帮助吗?

哇今天我问了很多问题._。

修改

$result = mysql_query("SELECT * FROM $gid LIMIT 25") or throwerror(mysql_error());

outputscores($result);

EDIT2 另一个可能的电话:

$result = mysql_query("SELECT * FROM ".$gid.",users WHERE users.lastcheck < ".$gid.".timestamp") or throwerror(mysql_error());

outputscores($result);

3 个答案:

答案 0 :(得分:3)

你正在试图扭转整个结果集,尝试这样的事情:

function outputscores($mysqlres,$reverse=false)
{
   $results = array();
   while($row = mysql_fetch_array($mysqlres)){
    print('I found a result: <pre>'.print_r($row, false).'</pre>'); //debugging purposes
    $results[] = $row;
   }
   if($reverse) { $results = array_reverse($results); }
   foreach($results as $row)
   {
    echo '<img src="img/date.png" /> ' . date("j M Y",strtotime($row['timestamp'])) .    '
    <img src="img/time.png" /> ' . date("H:i:s",strtotime($row['timestamp'])) . '
    <img src="img/star.png" /> '.$row['score'].$_GET["scoretype"].'<br />';
  }
}

哦确实正如soulmerge所说,你应该为函数提供一个mysql资源,而不是实际的查询。像这样:

$query = "SELECT field FROM table";
$res = mysql_query($query);
output_scores($res, true);

关于你的评论,请确保你的查询实际上是返回结果,在phpMyAdmin中测试它或者在while循环中添加一个简单的打印,如上所述。

答案 1 :(得分:3)

编辑:将您的SQL查询更改为:

$mysqlquery="SELECT * FROM $gid";

将您的功能更改为:

function outputscores($mysqlquery,$reverse=false)
{
    if ($reverse==true)
        $mysqlquery.=" ORDER BY id DESC LIMIT 25";
    else
        $mysqlQuery.=" LIMIT 25";
    $result=mysql_query($mysqlquery);
    while($row = mysql_fetch_array($result))
    {
       //Do output here
    }
}

在这里,通过添加单词ORDER BY id DESC,您将使记录按表中“id”列的降序排序。通过键入ASC而不是DESC,您可以按升序排序。此外,您可以将'id'替换为表格中的任何其他列,例如timestampscore等。

编辑:或者,您也可以使用不同的函数将LIMITORDER BY子句添加到查询中。然后你可以做这样的事情:

$reverse=false;//or true
$mysqlquery=addOrderBy("SELECT * FROM $gid",$reverse);
outputScores($mysqlquery);

答案 2 :(得分:1)

如果我说得对,$ mysqlquery应该是mysql查询结果,而不是数组。有两种情况mysql_fetch_array() 返回数组:

  1. 参数不是查询结果资源(使用var_dump($mysqlquery))验证,或
  2. 根本没有结果(mysql_fetch_array()返回FALSE)。
  3. 我希望您不会将查询本身传递给mysql_fetch_array(),因为变量的名称意味着。您必须先致电mysql_query()才能获取任何内容。

    可以通过获取所有行并调用array_reverse()来完成反转。例如:

    $rows = array();
    while ($row = mysql_fetch_array($result)) {
        $rows[] = $row;
    }
    array_reverse($rows);