MySQLi num_rows返回0

时间:2012-01-04 05:11:39

标签: php mysqli

这是我的代码

$stmt = $conn->mysqli->stmt_init();
$stmt = $conn->mysqli->prepare('SELECT Username, EmailVerified, Blocked FROM user WHERE Email = ? AND SLANumber = ? AND Password = ?');
$stmt->bind_param('ssb', $_POST['EmailID'], $_POST['SLANumber'], $_POST['Password']);
$stmt->execute();
$stmt->store_result();
$result = $stmt->get_result();
if($result->num_rows == 0){
    echo 'No rows found';
}
else{
    // Continue processing here
    .....
}

代码总是回应No rows found。一两天之前,工作正常。

正如预期的那样,直接运行查询会得到所需的结果。

代码出了什么问题?

2 个答案:

答案 0 :(得分:1)

num_rowsmysqli_stmt的属性,而不是结果资源。所以你应该这样做:

$result = $stmt->get_result();

// Also check strict comparison against int 0,
// to avoid incorrect equality with boolean FALSE
if($stmt->num_rows === 0){
    echo 'No rows found';
}

答案 1 :(得分:1)

不要在同一语句中一起使用store_result和get_result。

将store_result方法与“num_rows”,“bind_result”和“fetch”一起使用。

对于get_result方法,请使用“affected_rows”和“fetch_array”。您仍然可以在收入get_result方法中使用“num_rows”属性,如下所示。

$stmt->execute();
// $stmt->store_result();
$result = $stmt->get_result();
if(result->num_rows == 0){
  ...
}

OR

$stmt->execute();
// $stmt->store_result();
$result = $stmt->get_result();
if($stmt->affected_rows == 0){
  ...
}