2012-01-04 81 views
0

这里是我的代码库MySQLi NUM_ROWS返回0

$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。一两天前,它工作正常。

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

代码有什么问题?

+0

你为什么要送'$ _ POST [ '密码']'作为一个blob'B',而不是字符串's'? – 2012-01-04 05:14:03

+0

@Michael:我在php.net的文档中阅读它。 – 2012-01-04 05:15:50

回答

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'; 
} 
+0

也是Result的财产。见http://in2.php.net/manual/en/mysqli-result.num-rows.php。 – 2012-01-04 05:19:23

+0

使用$ stmt-> num_rows仍然返回0. – 2012-01-04 05:21:28

+0

好的。使用三重===的窍门。谢谢 – 2012-01-04 05:23:02

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){ 
    ... 
}