不能从flash游戏中动态访问mySQL数据库的更新版本


Cannot dynamically access updated versions of my mySQL database from within my flash game

我使用Actionscript 3创造了一款游戏。在这个游戏中,我将分数保存到在线mySQL数据库中。我通过调用我使用URLLoader类编写的php脚本,从我的flash游戏中访问这个数据库。

我载入了所有玩家的分数,以便他们可以在游戏开始时查看,然后在关卡完成时保存。

我的问题是,一旦我保存了一个分数,然后在主菜单中重新加载所有分数,我检索的是游戏开始时加载的分数,而不是更新的分数。如果我重新开始游戏,我只能查看更新的分数。

这是加载我的分数的actionscript代码。在主菜单初始化时调用一次。

getScoresRequest = new URLRequest("http://localhost/GetScores.php");
getScoresRequest.method = URLRequestMethod.GET;
getScoresLoader = new URLLoader();
getScoresVariables = new URLVariables();
getScoresVariables.email = Globals.email;
getScoresRequest.data = getScoresVariables;
getScoresLoader.dataFormat = URLLoaderDataFormat.TEXT;
getScoresLoader.addEventListener(Event.COMPLETE, completeHandler);
getScoresLoader.load(getScoresRequest);
private function completeHandler(e:Event):void
{
    var xmlData:XML = new XML(e.target.data);
}

然后我使用这个xmlData来显示我的分数。

这是我的php加载我的分数:

<?php
$email = $_REQUEST["email"];
$dbh=mysql_connect ("**********", "*****", "*******")
or die ('I cannot connect to the database because: ' . mysql_error());
mysql_select_db ("*******",$dbh);
$query = "SELECT * FROM Scores WHERE email = '$email'";
$result = mysql_query($query, $dbh);
$xml_output = "<Scores>'n";
for($x = 0; $x < mysql_num_rows($result); $x++)
{
    $row = mysql_fetch_assoc($result);
    $xml_output .= "'t<Entry>'n";
    $xml_output .= "'t't<Level>" . $row['level'] . "</Level>'n";
    $xml_output .= "'t't<Score>" . $row['score'] . "</Score>'n";
    $xml_output .= "'t</Entry>'n";
}
$xml_output .= "</Scores>";
echo $xml_output;

mysql_close($dbh);
?>

我用于保存分数的actionscript与加载器非常相似。dataFormat设置为变量,而不是文本。如果有人想让我发这篇文章,我可以。

下面是用于保存的php:

<?php
$email = $_REQUEST["email"];
$level = $_REQUEST["level"];
$score = $_REQUEST["score"];
$dbh=mysql_connect ("******", "********", "********")
or die ('I cannot connect to the database because: ' . mysql_error());
mysql_select_db ("********",$dbh);
$query = "SELECT * FROM Scores WHERE email = '$email' AND level = '$level'";
$result = mysql_query($query, $dbh);
$row = mysql_num_rows($result);
$returnVars = array();
if($row > 0)
{
for($x = 0; $x < 1; $x++)
{
    $currentRow = mysql_fetch_assoc($result);
    if((int)$score > (int)$currentRow['score'])
    {
        $returnVars['prevHighScore'] = $currentRow['score'];
        $updateQuery = "UPDATE Scores SET score = '$score' WHERE email = '$email' AND level = '$level'";
        $result = mysql_query($updateQuery, $dbh);
        $returnVars['newHighScore'] = $score;
        $returnVars['type'] = "Score Updated";
    }
    else
    {
        $returnVars['prevHighScore'] = $currentRow['score'];
        $returnVars['newHighScore'] = '0';
        $returnVars['type'] = "Score Not Updated";
    }
}
}
else
{
    $insertQuery = "INSERT INTO Scores(email, level, score) VALUES('$email', '$level', $score)";
    $result = mysql_query($insertQuery, $dbh);
    $returnVars['newHighScore'] = $score;
    $returnVars['prevHighScore'] = "0";
}
$returnVars['rows'] = $row;
$returnString = http_build_query($returnVars);
echo $returnString ;
mysql_close($dbh);
?>

我的数据库肯定在更新,因为我可以查看内容。

如果有人有什么建议,我将不胜感激。

无耻地把自己的评论作为答案

尝试添加一个随机值到您的url。如:

http://localhost/GetScores.php?_rand=0.12324343213

,并在每次访问源代码时重新生成此值。