我有一个用户表,每次用户完成游戏时,我都要在其中更新分数。Unityscript部分运行良好,但在我将分数发布到数据库后,它看起来是两倍或三倍。我把分数发布为int,表格列也是int格式。我的PHP是这样的:
try {
$db = new PDO("mysql:host=$host;dbname=$dbname", $db_user, $db_pass);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$data = array(
':username' => $_POST['username'],
':score' => $_POST['score']);
$statement = $db -> prepare ("UPDATE users SET score = score + :score
WHERE username = :username");
$statement->execute($data);
}
catch(PDOException $e) {
echo $e->getMessage();
}
如有任何帮助或建议,我们将不胜感激。
您正在使用准备好的语句,但仍允许通过直接实现$score
变量进行注入。对分数和用户名做同样的事情。
你说的双倍或三倍是什么意思?你的意思是这个数字大两到三倍吗?如果是这样,请尝试使用SELECT
语句来获取分数并用PHP进行计算。然后,UPDATE
生成users
表。
这样做可以让你更好地理解自己做错了什么。您是否尝试在try-and-catch中回显score
的值,以查看该值是否重复?该代码可能运行了多次。
$statement = $db -> prepare ("UPDATE users SET score = :score
WHERE username = :username");
使用这个,我认为它会工作