2014-02-23 49 views
1

从数据库获取数据时,如果我的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"; 
} 

感谢。

+1

请阅读 - http://php.net/manual/mysqli.quickstart.prepared-statements.php。将值直接注入到查询中是不安全的 – Phil

+0

虽然理论上它是不安全的,但在大多数情况下,类型转换和适当的卫生处理将阻止注入。我的观点是,操作者需要首先学习这种方法,并在他能够转向准备好的陈述并充分理解他们完成的任务之前,先掌握优势和劣势。 – r3wt

+1

@ r3wt不知道你的情况,但我发现准备一个语句和绑定参数比直接清理输入参数并将它们插入到查询中更容易(和更短)。 – Phil

回答

3

你有错字在两个查询:

取代单引号(')在badge与反推(`) 从您的选择查询。

然后用插入查询中的反引号替换单引号。例如:

$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"; 
} 
+0

这是一个简单的解决方法,谢谢!好的是,我想所有的事情都是对的。 – blytung

+0

不客气。我们在某个时候都是一个小菜鸟。 – r3wt

2

您的INSERT查询是错误的。

您对您的列名的单引号,但你应该使用反引号,而不是(像SELECT查询)

+2

SELECT'查询中也有不正确的引号 – Phil

+0

@Phil Erm ...在哪里? –

+0

'AND'badge'='$ badgename'' – Phil