我想根据“id”和“devicetoken”两列检查数据库表中是否存在条目。
作为这个函数的结果,我总是得到 true,但是在数据库中,没有这样的条目。这怎么可能?
$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;
}
}
当我使用此参数运行页面时:
token:asdf
id:2
我得到打印的输出 2AA
,因为 $resultId == $uid
。但这怎么可能呢? select 语句清楚地过滤了两个 where 条件,并且没有诸如 token = asdf 和 id = 2 这样的条目。
id = 2 的真实条目具有标记值 = 'b'。
这是我的表格的截图:
如果我在 Mysql Workbench 上运行代码
SELECT id from devices where devicetoken = 'b2' and id = 2
我没有得到任何错误和 0 个结果,这是正确的。但是从 PHP 页面得到错误的结果。这怎么可能?
最佳答案
看到 OP 想要一个答案:
正如我在评论中所述, token 是一个字符串,您正在为绑定(bind)中的“整数”传递 i
。
对于字符串应该是“s
”。
bind_param('si'
关于php 检查数据库中的行是否存在总是返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41122971/