2014-12-02 122 views
0

在後臺我有REST API,代碼:PHP的while循環代替的foreach得到陣列數據

$app->get('/tasks', 'authenticate', function() { 
      global $user_id; 
      $response = array(); 
      $db = new DbHandler(); 

      // fetch task 
      $result = $db->getAllUserTasks($user_id); 

      $result = $db->getAllUserTasks($user_id); 

     if ($result != NULL) { 

      $response["error"] = false; 
      $response["id"] = $result["id"]; 
      $response["task"] = $result["task"]; 
      $response["status"] = $result["status"]; 
      $response["createdAt"] = $result["created_at"]; 
      echoRespnse(200, $response); 
     } else { 
      $response["error"] = true; 
      $response["message"] = "The requested resource doesn't exists"; 
      echoRespnse(404, $response); 
     } 
     }); 

,並使用此代碼,我從陣列得到的只是第一個數據:

{ 
error: false 
id: 2 
task: "Create something" 
status: 0 
createdAt: "2014-12-01 01:58:42" 
} 

現在當我想獲取所有數據寫到:

if ($result != NULL) { 
       foreach ($result as $rez) { 
       $response["error"] = false; 
       $response["id"] = $rez["id"]; 
       $response["task"] = $rez["task"]; 
       $response["status"] = $rez["status"]; 
       $response["createdAt"] = $rez["created_at"]; 
       echoRespnse(200, $response); 
       } 
      } else { 
       $response["error"] = true; 
       $response["message"] = "The requested resource doesn't exists"; 
       echoRespnse(404, $response); 
      } 

所以用foreach循環相同的代碼,但然後我得到:Unexpected token {

那有什麼問題?我如何在這裏實現WHILE循環而不是foreach ???

更新功能:

public function getAllUserTasks($user_id) { 
     $stmt = $this->conn->prepare("SELECT t.* FROM tasks t, user_tasks ut WHERE t.id = ut.task_id AND ut.user_id = ?"); 
     $stmt->bind_param("i", $user_id); 
     if ($stmt->execute()) { 
      $res = array(); 
      $stmt->bind_result($id, $task, $status, $created_at); 
      // TODO 
      // $task = $stmt->get_result()->fetch_assoc(); 
      $stmt->fetch(); 
      $res["id"] = $id; 
      $res["task"] = $task; 
      $res["status"] = $status; 
      $res["created_at"] = $created_at; 
      $item[] = $res; 
      $stmt->close(); 
      return $item; 
     } else { 
      return NULL; 
     } 
    } 
+0

到底在哪你得到「意外的標記{」? – 2014-12-02 15:40:43

+0

是的,我這樣做對不起,錯在CDE – LaraBeginer 2014-12-02 15:41:04

回答

2

商店的結果作爲數組和發送整個數組時結束循環:

if ($result != NULL) { 
    $items = array(); 

    foreach ($result as $rez) { 
     $response["error"] = false; 
     $response["id"] = $rez["id"]; 
     $response["task"] = $rez["task"]; 
     $response["status"] = $rez["status"]; 
     $response["createdAt"] = $rez["created_at"]; 

     $items[] = $response; 
    } 

    echoRespnse(200, $items); 
} else { 
    $response["error"] = true; 
    $response["message"] = "The requested resource doesn't exists"; 
    echoRespnse(404, $response); 
} 

而且echoRespnse()應該json_encode在$項目陣列。

而且,在你的getAllUserTasks()功能,你應該使用一個while循環來獲取所有從數據庫中的結果:

if ($stmt->execute()) { 
    $items = $res = array(); 

    $stmt->bind_result($id, $task, $status, $created_at); 

    // fetch values 
    while ($stmt->fetch()) { 
     $res["id"] = $id; 
     $res["task"] = $task; 
     $res["status"] = $status; 
     $res["created_at"] = $created_at; 

     $items[] = $res; 
    } 

    $stmt->close(); 

    return $items; 
} else { 
    return NULL; 
} 
+0

不錯,但現在我得到了錯誤的數據是這樣的:[4] 0:{ 錯誤:錯誤 ID:空 任務:空 狀態:空 createdAt:空 } - 1:{ 錯誤:錯誤 ID: 「C」 任務: 「C」 狀態: 「C」 createdAt: 「C」 } - 2:{ 錯誤:錯誤 ID:空 任務:null status:null createdAt:null } - 3:{ 錯誤:錯誤 ID: 「2」 任務: 「2」 狀態: 「2」 createdAt: 「2」 } – LaraBeginer 2014-12-02 15:50:32

+1

@LaraBeginer也許你實現我的建議錯了地方?看我更新的例子。 – 2014-12-02 15:53:14

+0

我再次得到公正:[1] 0:{ 錯誤:錯誤 ID:2 任務: 「創造一些」 狀態:0 createdAt: 「2014年12月1日1時58分42秒」 }這樣只是第一個數據(來自任務的第一個用戶任務)我將用功能更新代碼getAllUserTasks()now – LaraBeginer 2014-12-02 15:57:13