mysqli num_rows不返回正确的行数 - 检查所有值

时间:2015-06-10 12:18:26

标签: php mysql select mysql-num-rows

如果有icon.envelop.2.gif的消息,我试图显示message_status = 2。但是由于某些不明原因,此查询返回0。 我在这里错过了什么?

$_SESSION['user_id']有效,$access_level也是如此。我已经检查了我的表格,我有一个输入正确的message_receive号码,我也尝试使用message_to_stab = 5,这是正确的数字。

这是我数据库中的信息:

  • message_id = 1
  • message_receive = 697
  • message_status = 2
  • message_to_stab = 5 or message_to_stab = NULL

这是我在会话和access_level中的信息:

  • access_level = 5
  • $_SESSION['user_id'] = 697

这是我的代码:

$sql = "SELECT message_id FROM private_messages WHERE message_status = 2 AND (message_receive = ? OR message_to_stab = ?)";
$stmt = $mysqli->prepare($sql) or die ("Database error: <br>" . $sql . "<br><b>Error message:</b> " . $mysqli->error);
$stmt->bind_param("ii", $_SESSION['user_id'], $access_level);
$stmt->execute() or die("Something went wrong");

if($stmt->num_rows != 0){
    $html .= 'icon.envelope.2.gif';
}
else{
    $html .= 'icon.envelope.gif';
}

$stmt->free_result();
$stmt->close();

这是问题,没有错误,我希望邮件符号与status下的邮件符号类似。

Image showing messaging error

1 个答案:

答案 0 :(得分:0)

我设法使用$stmt->fetch()来解决问题。我不得不将查询更改为LIMIT 1,以便在有多条未读消息可用时防止出现错误。

if($stmt->fetch()){
    $html .= 'icon.envelope.2.gif';
}
else{
    $html .= 'icon.envelope.gif';
}
PS:更好的答案非常受欢迎。我仍然不知道为什么rowCount()num_rows无效。