这个mysql_query只适用于某些时候


This mysql_query just work some times

我不知道为什么,但这个mysql_query只是工作了一些时间。我不知道为什么,因为一切都很好这里的这个:

mysql_query("UPDATE users SET `profit`=profit+$profit, `won`=won+$jackpotcost, `gameswon`=gameswon+1, `games`=games+1 WHERE `steamid`='$winnerid'") or die(mysql_error()); 

但这个不起作用:

while($row = mysql_fetch_array($rs))
{
    if($row["userid"] == $winnerid)
    {
        $time=time();
        $time=$time+10;
        mysql_query("UPDATE users SET `profit`=profit+$profit, `won`=won+$jackpotcost, `gameswon`=gameswon+1, `games`=games+1 WHERE `steamid`='$winnerid'") or die(mysql_error());
        mysql_query("INSERT INTO `messages` (`type`,`app`,`userid`,`title`,`msg`,`time`,`active`,`delay`) VALUES ('success','0','$winnerid','Congratulations!','You won $$jackpotcost in Game #$cg with a $wonpercent% chance!','10',1,$time)");
    }
    else
    {
        $loserid = $row["userid"];
        $rs = mysql_query("SELECT * FROM ".$p2t."game".$cg." WHERE `userid`=".$loserid."");
        $losercost=0;
        while($lrow = mysql_fetch_array($rs))
        {
            $losercost+=$lrow['value'];
        }
        $time=time();
        $time=$time+10;
        mysql_query("UPDATE users SET `profit`=profit-$losercost, `games`=games+1 WHERE `steamid`='$loserid'") or die(mysql_error());
        mysql_query("INSERT INTO `messages` (`type`,`app`,`userid`,`title`,`msg`,`time`,`active`,`delay`) VALUES ('error','0','$loserid','GL Next Game!','$winnername won $$jackpotcost in Game #$cg with a $wonpercent% chance!','10',1,$time)");
    }
}

如果有人能帮我解释一下它的问题

您正在覆盖内部循环上的$rs变量。更改名称应该没问题。

如果它有时工作,我怀疑您没有使用mysql_real_escape_string($variable)

你会想做:

$variable = ""; // content goes here
// then for readying the input
mysql_real_escape($variable);
$query = ""; // your query goes here.
mysql_query($query);

这是干什么的


mysql_real_escape_string()将转义输入变量或用户输入的引号。它将为查询准备好您的变量/输入。

注意:您可能希望移动到MySQLi(AKA:MySQL improved)或移动到PDO。它将主要通过安全问题来改进您的代码。

希望这能有所帮助。