1

我将投票存储在数据库中,其值范围为 0 到 10。我遇到的问题是,当满足查询条件的投票为 0 时,它会触发 else 语句。如果我将 if 语句更改为...

if ($vote >= 0)

...那么即使没有任何内容符合查询条件,if 语句也始终为真。我怎样才能区分这两者?谢谢。

$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
}
4

1 回答 1

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 
}
于 2012-11-29T02:29:36.640 回答