我想检查db-table中的条目是否存在基于两列' id'和' devicetoken'。
我总是从这个函数得到结果,但在数据库中,没有这样的条目。怎么可能?
$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;
}
}
当我用这个参数运行页面时:
令牌:ASDF
ID:2
我得到了打印的输出2AA
,因为$resultId == $uid
。但这怎么可能呢? select语句清楚地过滤了两个where-conditions,并且没有token = asdf和id = 2这样的条目。
id = 2的真实条目具有标记值=' b'。
这是我桌子的截图:
如果我在Mysql Workbench上运行代码
SELECT id from devices where devicetoken = 'b2' and id = 2
我没有错误和0结果,这是正确的。但是从PHP页面得到了错误的结果。怎么可能?
答案 0 :(得分:1)
看到OP希望找到答案:
正如我在评论中所说的那样,令牌是一个字符串,你传递的是i
"整数"在绑定中。
它应该是" s
"对于一个字符串。
bind_param('si'