区分变量等于0和变量等于空数组['列']

时间:2012-11-29 02:22:33

标签: php mysql arrays

我将投票存储在数据库中,其值介于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
}

1 个答案:

答案 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 
}