2014-02-23 84 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