Php MySQLI并选择1

Php MySQLI并选择1,php,mysql,Php,Mysql,当从数据库获取数据时,我的if语句没有按预期工作,即使我在数据库中为该用户设置了$badgename,我还是得到了“You get a new badge”。但它没有穿上 我是MySQLI的新手,所以这可能是我错过的东西 $numberofposts=$row['posts']; $userid = $_SESSION['userid']; $badgename = "Legend"; if($numberofposts >= 10){ $SQL = $mysqli->query

当从数据库获取数据时,我的if语句没有按预期工作,即使我在数据库中为该用户设置了$badgename,我还是得到了“You get a new badge”。但它没有穿上

我是MySQLI的新手,所以这可能是我错过的东西

$numberofposts=$row['posts'];
$userid = $_SESSION['userid'];
$badgename = "Legend";

if($numberofposts >= 10){

$SQL = $mysqli->query("SELECT 1 FROM `badges` WHERE `mid`='$userid' AND 'badge' = '$badgename'");
$num = $SQL->num_rows;

if($num > 0){
 echo "You got a new badge";
 $mysqli->query("INSERT INTO badges ('mid', 'badge') VALUES ('$userid', '$badgename')");
}
else 
{
echo "You already have this badge";
}

谢谢

您的插入查询错误


列名周围有单引号,但应该改用反勾号(如在SELECT查询中)

插入查询是错误的


列名周围有单引号,但应该使用反勾号(如在选择查询中)

两个查询中都有输入错误:

徽章
上的单引号(')替换为反勾(`) 从您的选择查询

然后在insert查询中将单引号替换为反勾号。例:

 $numberofposts=$row['posts'];
 $userid = $_SESSION['userid'];
 $badgename = "Legend";

if($numberofposts >= 10){

 $SQL = $mysqli->query("SELECT 1 FROM `badges` WHERE `mid`='$userid' AND `badge` =     '$badgename'");
 $num = $SQL->num_rows;

 if($num > 0){
  echo "You got a new badge";
 $mysqli->query("INSERT INTO `badges` (`mid`, `badge`) VALUES ('$userid', '$badgename')");
 }
 else 
{
echo "You already have this badge";
}

您在两个查询中都有输入错误:

徽章
上的单引号(')替换为反勾(`) 从您的选择查询

然后在insert查询中将单引号替换为反勾号。例:

 $numberofposts=$row['posts'];
 $userid = $_SESSION['userid'];
 $badgename = "Legend";

if($numberofposts >= 10){

 $SQL = $mysqli->query("SELECT 1 FROM `badges` WHERE `mid`='$userid' AND `badge` =     '$badgename'");
 $num = $SQL->num_rows;

 if($num > 0){
  echo "You got a new badge";
 $mysqli->query("INSERT INTO `badges` (`mid`, `badge`) VALUES ('$userid', '$badgename')");
 }
 else 
{
echo "You already have this badge";
}

请看这个-。直接向查询中注入值是不安全的,而理论上是不安全的,在大多数情况下,类型转换和适当的清理将阻止注入。我的意见是,op需要先学习这种方法,并直接了解其优点和缺点,然后才能继续编写语句并完全理解它们所完成的任务。@r3wt不知道您的情况,但我发现编写语句和绑定参数要容易得多(而且更短)与直接清理输入参数并将其插入查询相比,您是对的,预处理语句比查询更具优势。我只是觉得op还没有准备好。@r3wt op可以阅读链接的文章,那么他们就准备好了:)请阅读这个-。直接向查询中注入值是不安全的,而理论上是不安全的,在大多数情况下,类型转换和适当的清理将阻止注入。我的意见是,op需要先学习这种方法,并直接了解其优点和缺点,然后才能继续编写语句并完全理解它们所完成的任务。@r3wt不知道您的情况,但我发现编写语句和绑定参数要容易得多(而且更短)与直接清理输入参数并将其插入查询相比,您是对的,预处理语句比查询更具优势。我只是觉得op还没有准备好。@r3wt op可以阅读链接的文章,然后他们就准备好了:)这是一个简单的修复,谢谢!好的是,我想其他一切都是对的。这是一个简单的解决办法,谢谢!好的是,我想其他的一切都是对的。
和'badge'='$badgename'
哦,是的。错过了<代码>和“徽章”=“$badgename”哦,是的。错过了!