2012-01-04 94 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){ 
    ... 
}