2017-09-16 72 views
0

我是新來的mysqli。我連接到一個MySQL數據庫,並獲取一些數據。> NUM_ROWS返回0

$user_id = "CCD_00005"; 

    /* create a prepared statement */ 
    if ($stmt = mysqli_prepare($GLOBALS['conn'], "SELECT user_name FROM user_master WHERE user_id=?")) { 

     /* bind parameters for markers */ 
     mysqli_stmt_bind_param($stmt, "s", $user_id); 

     /* execute query */ 
     mysqli_stmt_execute($stmt); 

     /* bind result variables */ 
     mysqli_stmt_bind_result($stmt, $user_name); 

     /* fetch value */ 
     mysqli_stmt_fetch($stmt); 

     echo("Total Results:".$stmt->num_rows."<br />"); 

     printf("%s is having name %s\n", $user_id, $user_name); 

     /* close statement */ 
     mysqli_stmt_close($stmt); 
} 

我得到的結果Total Results:0 CCD_00005 is having name sdafasdf

爲什麼我沒有得到的行數爲1

請幫助。

+1

您可能需要'$ stmt-> store_result()'之前,首先可以檢查的行數。 – Tolios

+2

從上'mysqli_stmt :: $ num_rows'手冊:「*返回的行數在結果集中使用的'mysqli_stmt_num_rows()'取決於你是否不使用'mysqli_stmt_store_result()'緩衝整個結果。在聲明手柄設置如果你使用'mysqli_stmt_store_result()','mysqli_stmt_num_rows()'可以立即調用*:相關‘」 – Qirel

+0

NB用來關閉與問題的重複,被下**發現’**區域放在屏幕的右側。 –

回答

1

改變你的執行順序如下:

$user_id = "CCD_00005"; 

    /* create a prepared statement */ 
    if ($stmt = mysqli_prepare($GLOBALS['conn'], "SELECT user_name FROM user_master WHERE user_id=?")) { 

     /* bind parameters for markers */ 
     mysqli_stmt_bind_param($stmt, "s", $user_id); 

     /* execute query */ 
     mysqli_stmt_execute($stmt); 

     mysqli_stmt_store_result($stmt);   
     echo("Total Results:".mysqli_stmt_num_rows($stmt)."<br />"); 

     /* bind result variables */ 
     mysqli_stmt_bind_result($stmt, $user_name); 

     /* fetch value */ 
     mysqli_stmt_fetch($stmt); 


     printf("%s is having name %s\n", $user_id, $user_name); 

     /* close statement */ 
     mysqli_stmt_close($stmt);