2016-09-02 6 views
0

私はusersテーブルからすべてのユーザーを取得し、JSONとしてレスポンスを返そうとしていますが、テーブルにデータがある場合でもテーブルのエラーは常に空です。phpとmysqlを使用してテーブルからすべてのユーザーを取得

マイコード:

<?php 
include './include/DbHandler.php'; 

    $db = new DbHandler(); 
    $response = array(); 

    // fetching all users 
    $result = $db->getAllUsers(); 

    if($result != NULL){ 
     $response["error"] = false; 
     $response["users"] = array(); 

     // looping through result and preparing users array 
     while ($user = $result->fetch_assoc()) { 
      $tmp = array(); 
      $tmp["user_id"] = $user["id"]; 
      $tmp["first_name"] = $user["first_name"]; 
      $tmp["last_name"] = $user["last_name"]; 
      $tmp["mobile"] = $user["mobile"]; 
      $tmp["fcm_token"] = $user["token"]; 
      array_push($response["users"], $tmp); 
     } 
    } else { 
     $response["error"] = true; 
     $response["message"] = "No users found on DB"; 
    } 

    echo json_encode($response);  
?> 

getAllUsers機能:

public function getAllUsers(){ 

    $stmt = $this->conn->prepare("SELECT u.id, u.first_name, u.last_name, u.mobile, u.token FROM users u"); 

    if($stmt->execute()){ 

     if($stmt->num_rows > 0){ 
      $users = $stmt->get_result(); 
      $stmt->close(); 

      return $users; 
     } else { 
      return NULL; 
     } 
    } else { 
     return NULL; 
    } 

} 
+0

あなたは$ stmt-> NUM_ROWSの値を共有することはできますか? –

+0

を試してみてください。ここから1 – Oncodeeater

+0

を追加しました:echo $ stmt-> num_rows(); 2番目の前にgetAllUsers関数があり、0が得られました!テーブルにはデータがありますが。 –

答えて

0

がgetAllUsers機能でこの

$stmt = $this->conn->prepare("SELECT u.id, u.first_name, u.last_name, u.mobile, u.token FROM users u"); 

if($stmt->execute()){ 

    $stmt->store_result(); 
    if($stmt->num_rows > 0){ 
     $users = $stmt->get_result(); 
     $stmt->close(); 

     return $users; 
    } else { 
     return NULL; 
    } 
} else { 
    return NULL; 
} 

を試してみてください(($ stmt->のstore_resultを追加する)場合(stmy_num前-rows)

http://php.net/manual/fr/mysqli-stmt.num-rows.php

+0

OKです。進歩$ stmt-> store_result();を追加した後。私は値を印刷して2を得ましたが、 "return $ users"は返り値nullのように見えます。 –

+0

関数getAllusersで文を閉じてから、$ result-> fetch_assocを実行することはできません。閉じるステートメントの前に、関数(getAllUser)の結果をフォーマットしてみてください。私の英語を許すのは私の母国語ではない –

0

また、あなたが微調整した後に直面している正確な問題であり、このリンクを参照してください、

$stmt->fetch(); 

の代わりに、

$stmt->get_result(); 
0

を取得すると、これを試してみてください。これにより、問題が解決されます。

public function getAllUsers(){ 

     $stmt = $this->conn->prepare("SELECT u.id, u.first_name, u.last_name, u.mobile, u.token FROM users u"); 
     if($stmt->execute()){ 
      $stmt->store_result(); 
      if($stmt->num_rows > 0){ 
       $stmt->bind_result($col1, $col2, $col3, $col4, $col5); 
       while ($stmt->fetch()) { 
        printf("%s %s\n", $col1, $col2, $col3, $col4, $col5); 
       } 
       $stmt->free_result(); 
       $stmt->close(); 
      } else { 
       return NULL; 
      } 
     } else { 
      return NULL; 
     } 
} 

bind_resultを使用する必要があります。私はこの

パブリック関数getAllUsersのように、このhttp://php.net/manual/en/mysqli-stmt.bind-result.php

0

何かを使用する理由のリンクをチェックしてください(){

$stmt = $this->conn->prepare("SELECT u.id, u.first_name, u.last_name, u.mobile, u.token FROM users u"); 

if($stmt->execute()){ 

    if($stmt->num_rows > 0){ 

     if($stmt->get_result() != NULL){ 
      $response["error"] = false; 
      $response["users"] = array(); 

      // looping through result and preparing users array 
      while ($user = $stmt->fetch_assoc()) { 
       $tmp = array(); 
       $tmp["user_id"] = $user["id"]; 
       $tmp["first_name"] = $user["first_name"]; 
       $tmp["last_name"] = $user["last_name"]; 
       $tmp["mobile"] = $user["mobile"]; 
       $tmp["fcm_token"] = $user["token"]; 
       array_push($response["users"], $tmp); 
      } 
     } else { 
      $response["error"] = true; 
      $response["message"] = "No users found on DB"; 
     } 

     $stmt->close(); 

     return $response; 
    } else { 
     $stmt->close(); 
     return NULL; 
    } 
} else { 
    $stmt->close(); 
    return NULL; 
} 

}

関連する問題