2011-09-11 59 views
2

我是新来的数据库,我最近遇到一个很奇怪的问题:数据库SELECT查询问题

  1. 我创建了一个数据库,作为我的游戏,它拥有的球员的名字和分数排行榜服务器。我创建了一个php scipt来查询数据库,游戏将使用GET参数打开php url。

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

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

下面是我的故障排除: 1我不包括在我提交的分数PHP脚本“提交”。所以我手工做了,但是游戏仍然无法获得最新的数据。

  1. 我尝试通过使用GET参数输入php地址来在web浏览器中手动输出数据。它显示之前的数据与我的游戏中相同。所以问题不在游戏中。 我也mannualy在phpadmin输入sql命令,它会返回lastetes数据。所以我保证问题是用我的PHP?

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'] . "|"; 
    } 
+0

这将是你如何用PHP查询数据库。如果结果不符合您期望的问题,或者数据库中的数据不正确。 –

回答

1

你的PHP服务器缓存的SQL查询来避免的repetetive查询和降低负荷

关掉它由

set session query_cache_type=0; 

在PHP脚本选择的开始。

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

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

+0

是的。你是正确的,它的网页或PHP缓存它。我发现你对数据库查询的建议非常有用。谢谢 –

0

我注意到你没有包含的代码用于关闭到数据库的连接。如果它在那里,你只是没有显示它,然后忽视这一点。但除此之外,我想知道如果你没有明确关闭连接到数据库,如果它会创建一个持久连接缓存数据,直到建立一个新的连接。

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

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

0

我想你应该再次通过你的整个代码,看看你用一个实例的分数。为了更清楚地看看您是否使用了先前数据库检索中的分数数据。确保删除了这些实例,并且每次都从DataBase中检索所需的数据。