正在反转mysql_fetch_array()

falq053o  于 2022-11-28  发布在  Mysql
关注(0)|答案(3)|浏览(174)
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);

EDIT 2另一个可能的调用:

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

outputscores($result);
ulydmbyx

ulydmbyx1#

编辑:将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);
de90aj5v

de90aj5v2#

您可能正在尝试反转整个结果集,请尝试执行以下操作:

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循环中添加一个简单的print。

fruv7luv

fruv7luv3#

如果我没弄错的话,$mysqlquery应该是mysql查询结果,而不是数组。有两种情况mysql_fetch_array()不返回数组:
1.参数不是查询结果资源(使用var_dump($mysqlquery))验证,或
1.没有结果(mysql_fetch_array()返回FALSE)。
我希望您没有像变量名所暗示的那样将查询本身传递给mysql_fetch_array()。在获取任何内容之前,您必须调用mysql_query()
反转本身可以通过读取所有行并调用array_reverse()来完成。例如:

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

相关问题