从数据库获取数据时,如果我的if语句未按预期工作,即使数据库中的$ badgename为该用户,我得到了“您将获得一个新徽章”。但它没有穿上它。MySQLI和Select 1
进出口新的库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";
}
感谢。
请阅读 - http://php.net/manual/mysqli.quickstart.prepared-statements.php。将值直接注入到查询中是不安全的 – Phil
虽然理论上它是不安全的,但在大多数情况下,类型转换和适当的卫生处理将阻止注入。我的观点是,操作者需要首先学习这种方法,并在他能够转向准备好的陈述并充分理解他们完成的任务之前,先掌握优势和劣势。 – r3wt
@ r3wt不知道你的情况,但我发现准备一个语句和绑定参数比直接清理输入参数并将它们插入到查询中更容易(和更短)。 – Phil