PHP MySQLi多查询 - 命令不同步:mysqli_fetch_array

时间:2012-08-23 13:58:28

标签: php mysqli

我目前正在使用PHP创建一个页面,该页面将在我网站的高分中显示用户及其排名。

我遇到了一个问题,我的MySQL查询无法正常运行,但@VladBalmos解决了我的问题:MySQL Highscores - User's Personal Ranks: Duplicate Entries Causing Incorrect Values

现在我相信我的MySQL查询正常运行,我需要解决我的PHP代码引起的问题。这是我的代码:

$userid = (int) $_GET['searched'];
    for ($i = 0; $i < 5; $i++) {
        if ($i == 0) {
            $skill_query = mysqli_query($database, "SELECT uid, overall, overallxp, gamelevel FROM playerstats WHERE uid = ". $userid ." ORDER BY playerstats.overall DESC, playerstats.overallxp DESC") or print(mysqli_error($database));
            $skill_array = mysqli_fetch_array($skill_query);
            //old rank query: $rank_query = mysqli_query($database, "SELECT count(*) + 1 FROM (SELECT uid, overall, overallxp, gamelevel FROM playerstats GROUP BY playerstats.uid) AS x WHERE overall > (SELECT overall FROM playerstats WHERE uid = ". $userid .")") or print(mysqli_error($database));
            $rank_query = mysqli_multi_query($database, "SET @rank=0; SELECT rank, uid, overall, overallxp FROM (SELECT @rank:=@rank + 1 AS rank, uid, overall, overallxp FROM playerstats ORDER BY overall DESC, overallxp DESC) as tmp") or print(mysqli_error($database));
            $rank_array = mysqli_fetch_array($rank_query);
        } else {
            $skill_query = mysqli_query($database, "SELECT uid, ". $skills[$i] .", gamelevel FROM playerstats WHERE uid = ". $userid ." ORDER BY playerstats.". $skills[$i] ." DESC, playerstats.gamelevel DESC") or print(mysqli_error($database));
            $skill_array = mysqli_fetch_array($skill_query);
            $rank_query = mysqli_query($database, "SELECT count(*) + 1 FROM (SELECT uid, ". $skills[$i] .", gamelevel FROM playerstats GROUP BY playerstats.uid) AS x WHERE ". $skills[$i] ." > (SELECT ". $skills[$i] ." FROM playerstats WHERE uid = ". $userid .")") or print(mysqli_error($database));
            $rank_array = mysqli_fetch_array($rank_query);
        }

        echo "<tr class='hs_row'>";
        echo "<td align='center'>";
        echo $rank_array[0]; //rank output
        echo "</td>";
        echo "<td align='center'>";
        echo $skill_array[1]; //skilllevel
        echo "</td>";
        echo "<td align='center'>";
        if ($i == 0) {
            echo number_format($skill_array[2]); //skillxp
        } else {
            echo number_format($skill_array[1]); //skillxp
        }
        echo "</td></tr>";
    }

...而我收到的错误是:

  

警告:mysqli_fetch_array()要求参数1为mysqli_result,第156行的[path] /personal.php中给出布尔值

     

命令不同步;你现在不能运行这个命令

     

警告:mysqli_fetch_array()要求参数1为mysqli_result,第159行的[path] /personal.php中给出布尔值

     

命令不同步;你现在不能运行这个命令

     

警告:mysqli_fetch_array()要求参数1为mysqli_result,第161行的[path] /personal.php中给出布尔值

     

命令不同步;你现在不能运行这个命令

所以,我的问题是,如何更正此错误?

1 个答案:

答案 0 :(得分:1)

$rank_query = mysqli_multi_query($database, $yourQuery);
if($rank_query) {
    while(mysqli_next_result($dabatase)) {
        if($result = mysqli_store_result($database)) {
            while($row = mysqli_fetch_row($result) {
                // do something
            }
        }

    }
}

您必须遍历多个查询的结果,然后访问每个结果集的行。由于第一个查询只是设置一个变量,你必须跳到下一个结果集并获取实际的行(这就是为什么我做* while(mysqli_next_result ... *) 阅读php manual

上的文档