我有一个jQuery函数,它将结果时间变量发送到一个php文件,该文件将结果与数据库进行比较,如果是新的高分,则返回1 ..但由于某种原因,它返回111
这是PHP:
require_once('db.php');
$sql = "SELECT score FROM highscores ORDER BY score ASC LIMIT 10";
$result = mysqli_query($con, $sql);
$score = $_POST['time'];
while($row = mysqli_fetch_array($result)) {
if($row['score'] > $score) {
echo 1;
}
}
然后是jquery函数:
jQuery.ajax({
url:'model/highscore.php',
type:'POST',
data: {time:totalTime},
success:function(result){
highScore = result;
}
});
任何帮助都非常赞赏。
答案 0 :(得分:1)
为什么不根据需要修改SQL查询?
你获得了10个最高分,并循环遍历所有分数,以检查实际高于你的分数。但实际上,如果你的分数高于最高分,你实际上不会检查。
如果您想检查,如果您的分数最高,请计算所有高于您的分数。如果没有(count = 0),你知道你得到了最高。
编辑: 这是完整的脚本:
$score = $_POST['time']; // Format "00:00:02.95";
$sql = "SELECT Count(score) as c FROM highscores WHERE score > '".mysqli_real_escape_string($score)."'";
$result = mysqli_query($con, $sql);
$count = mysqli_fetch_object($result)->c;
if(!is_null($count) && $count < 1 )
echo 1;
}
必须添加转义函数以防止SQL注入!
您还应该为您的分数找到更好的数据类型,因为varchar不是时间戳的最佳代表。
我现在出去了。
编辑:检查$ count是否为空
答案 1 :(得分:0)
如果没有看到数据库本身,这通常是猜测,但我猜它会从您的数据库返回3个独立的分数。您需要将查询限制为1.
答案 2 :(得分:0)
这种情况正在发生,因为你正在循环浏览10个高分记录,并且它找到了3个更高的结果,所以它打印了三个时间1,就像它是
echo 1;
echo 1;
echo 1;
输出
111
您可以在echo 1
echo 1;
break;