2016-12-13 38 views
2

我想檢查一個db表中的條目是否存在基於兩列'id'和'devicetoken'。php檢查數據庫中是否存在行返回始終爲真

我總是從這個函數得到結果,但是在數據庫中,沒有這樣的入口。這怎麼可能?

$selectSQL = "SELECT id from devices where devicetoken = ? and id = ?"; 
echo "token:".$utoken."\n"; 
echo "id:".$uid."\n"; 
$resultId = -33; 
if ($stmt->prepare($selectSQL)) { 
    $stmt->bind_param('ii', $utoken, $uid); 
    $stmt->execute(); 
    $stmt->bind_result($resultId); 
    $stmt->fetch(); 
    $stmt->close(); 
    echo $resultId; 
    if ($resultId == $uid) { 
     echo "AA"; 
     return true; 
    } else { 
     echo "BB"; 
     return false; 
    } 
} 

當我運行的頁面與此PARAMS:

令牌:ASDF

ID:2

我得到被打印輸出2AA,因爲$resultId == $uid。但這怎麼可能呢? select語句明確地過濾兩個where條件,並且不存在諸如token = asdf和id = 2的條目。 id = 2的真實條目具有token值='b'。

這裏是我的表的截圖:

mysql table

如果我對MySQL工作臺

SELECT id from devices where devicetoken = 'b2' and id = 2 

運行代碼我沒有得到任何錯誤和0的結果,這是正確的。但是從PHP頁面得到錯誤的結果。這怎麼可能?

+2

令牌是一個字符串,你正在使用'i',使用's'。這是一個錯字問題。 –

+0

我聞到有人制定答案;恕我直言,不應該有。 –

+0

aaargh。非常感謝。這是問題! –

回答

1

眼看OP想要一個答案公佈:

正如我所說的意見,令牌是一個字符串,你逝去的i的「整數」的困境。

對於一個字符串,它應該是「s」。

bind_param('si' 
相關問題