数据库SELECT查询问题

时间:2011-09-11 04:08:58

标签: php mysql sql database

我是数据库的新手,最近我遇到了一个非常奇怪的问题:

  1. 我为我的游戏创建了一个数据库作为排行榜服务器,其中包含玩家名称和分数。我创建了一个php scipt来查询数据库,游戏将打开带有GET参数的php url。

  2. 我的提交分数功能完美无缺。我用phpadmin来检查。每次我提交它都会正确更新数据库。

  3. 问题是检索排行榜,我的游戏每10秒检索一次排行榜。它每次都成功。但它获得的分数始终不是数据库中最新的记录,都是以前的记录。几个小时后,它可以获得更新的数据。

  4. 以下是我的问题排查: 1我在提交分数php脚本中没有包含“commit”。所以我manully做了提交,但游戏仍然无法得到最新的数据。

    1. 我尝试通过输入带有GET参数的php地址来手动打印网页浏览器中的数据。它显示以前的数据与我的游戏相同。所以问题不在于游戏。 我也mannualy在phpadmin中输入sql命令,它将返回lastetes数据。所以我保证问题出在我的php上?
    2. php脚本:

      $query = "SELECT * FROM `space_scores` ORDER by `score` DESC";
          $result = mysql_query($query) or die('Query failed: ' . mysql_error());
      
          $num_results = mysql_num_rows($result); 
      
      
          for($i = 0; ($i < $lines)&&($i<$num_results); $i++)
          {
               $row = mysql_fetch_array($result);
               echo $i+1 . "," . $row['name'] . "," . $row['score'] . "|";
          }
      

4 个答案:

答案 0 :(得分:3)

您需要关闭查询缓存

set session query_cache_type=0;

有关详细信息,请参阅此链接:

http://dev.mysql.com/doc/refman/5.5/en/query-cache.html

答案 1 :(得分:1)

您的php服务器正在缓存sql查询以避免重复查询并减少负载

通过

将其关闭
set session query_cache_type=0;

在用于select的php脚本的开头。

此外,每10秒运行一次数据库查询并不是一个好主意。当您扩展到1000个用户(假设)时,您每秒至少会有100个请求,这对您的服务器来说不是很好。

考虑运行查询数据库的php脚本,并通过设置cron作业每隔1分钟将结果写入xml或逗号分隔文件,并每隔10秒从服务器获取此文件而不是php

答案 2 :(得分:0)

我注意到您没有包含关闭与DB连接的代码。如果它在那里,你只是没有显示它,那么忽略这一点。但除此之外,我想知道如果它创建一个缓存数据的持久连接,直到建立新连接,你是否显式关闭与数据库的连接。

如果要关闭连接,则可能需要查看数据库本身是否设置为缓存数据一段时间。

我真的认为这听起来像是一个缓存问题。

答案 3 :(得分:0)

我认为您应该再次查看整个代码,看看您是否使用了分数的实例。为了更清楚地了解您是否使用了先前数据库检索的分数数据。确保删除此类实例,并且每次都从DataBase中检索所需的数据。