我将投票存储在数据库中,其值介于0到10之间。我遇到的问题是当符合查询条件的投票为0时,它会触发else语句。如果我将if语句更改为...
if ($vote >= 0)
...即使没有符合查询条件,if语句也始终为true。我如何区分这两者?感谢。
$data = array($page_id, $user_id, 'yes');
$STH3 = $DBH->prepare("SELECT vote from votes WHERE page_id = ? and user_id = ? and current = ?");
$STH3->execute($data);
$STH3->setFetchMode(PDO::FETCH_ASSOC);
$row = $STH3->fetch();
$vote = $row['vote'];
if ($vote) {
// some code
}
else {
// some code
}
答案 0 :(得分:1)
在松散的比较中,NULL
将等于零。因此,如果没有符合您的条件且未填充$row['vote']
,则您将其不存在的值分配给$vote
,后者变为NULL
。您应该在将$vote
设置为空值之前对其进行测试,以避免undefined index
通知。然后在$vote
条件中检查if()
的整数值。
// $vote is NULL if $row is not populated
$vote = isset($row['vote']) ? $row['vote'] : NULL;
// Check that $vote is an int value as opposed to NULL
if (is_int($vote) && $vote >= 0) {
// Code executed when $vote is an integer value
}
else {
// Other code to execute if $row was empty
}
您还可以检查$row
是否为数组,这意味着您的fetch()
调用产生了一行:
if (is_array($row)) {
// Code using $vote
}
else {
// No row was returned
}