查找大于或等于给定数值的行(MySQL)

mbyulnm0  于 2023-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(162)

我正在创建一个排名系统,排名存储在数据库中,我的问题是找到大于或等于值的行给定用户xp
大概是这样的

等级表中的等级列表:

姓名:* 排名1 * 经验:400
姓名:* 排名2 * 经验:500
名称:Rank3 经验:* 七百 *

$xp = "500";

$find = $db->query("SELECT * FROM ranks WHERE exp >= '$xp' LIMIT 1");

if($find->num_rows > 0){
 // if a rank with greater than or equal value was found
  $rdata = $find->fetch_assoc();
 // return rank name
  echo $rdata["name"];
}

这返回Rank1,我不知道为什么:(
谁能帮帮我?我对MySQL还不是很了解。

9jyewag0

9jyewag01#

删除500左右的““,但为了将来的参考,我会将其转换为准备好的语句,因为您的查询并不安全

$xp = 500;

$query = "SELECT name FROM ranks WHERE exp >= ?' LIMIT 1";
$stmt = $db->prepare($query);
$stmt->bind_param("s",$xp);
$stmt->execute();
$stmt->bind_param($name);
while($stmt->fetch()){
   if($stmt->num_rows > 0 ){
      echo $name;
    }
}

另一个建议。而不是选择where >= $xp并限制为1,为什么不选择您实际要查找的范围?500到700之间,这样就不会带回700了

iq3niunx

iq3niunx2#

在查询中,您确实在$xp周围放置了单引号,但它可能是一个数值,而不是字符串。现在您可能正在将数值与字符串进行比较。尝试:

$find = $db->query("SELECT * FROM ranks WHERE exp >= $xp LIMIT 1");

相关问题