2014-12-01 6 views
0

Сначала я был бы:Php - вызов функции члена FETCH_ASSOC()

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); 
     $stmt->execute(); 
     $stmt->bind_result(); 
     $tasks = $stmt->get_result(); 
     $stmt->close(); 
     return $tasks; 
    } 

и эта функция есть проблема с get_result() поэтому вместо get_result теперь функцию писать BIND и FETCH:

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); 
     $stmt->execute(); 
     $tasks = array(); 
      $stmt->bind_result($id, $task, $status, $created_at); 

      $stmt->fetch(); 
      $tasks["id"] = $id; 
      $tasks["task"] = $task; 
      $tasks["status"] = $status; 
      $tasks["created_at"] = $created_at; 
      $stmt->close(); 
      return $tasks; 
    } 

Но на другой файл index.php теперь я получаю: <b>Fatal error</b>: Call to a member function fetch_assoc() on a non-object in <b>/home/agroagro/public_html/agroMobile/v1/index.php</b> on line <b>155</b><br />

так есть код:

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

      // fetching all user tasks 
      $result = $db->getAllUserTasks($user_id); 

      $response["error"] = false; 
      $response["tasks"] = array(); 

      // looping through result and preparing tasks array 
      while ($task = $result->fetch_assoc()) { <--HERE IS LINE 155 and ERROR 
       $tmp = array(); 
       $tmp["id"] = $task["id"]; 
       $tmp["task"] = $task["task"]; 
       $tmp["status"] = $task["status"]; 
       $tmp["createdAt"] = $task["created_at"]; 
       array_push($response["tasks"], $tmp); 
      } 

      echoRespnse(200, $response); 
     }); 

Я пытаюсь решить этот весь день и не работает ... Может ли кто-нибудь сказать мне, что именно здесь проблема?

В чем проблема с этим кодом?

+2

Вы двойной выборки это ... '$ tasks' уже содержит свой результат ... – RichardBernards

+0

, как решить, что мне нужно изменить в коде? – LaraBeginer

+0

'stmt-> bind_result ($ id, $ task, $ status, $ created_at);' + '$ tasks ['id'] = $ id' просто выглядит грязным, IMO. Просто выберите строку (ы) в качестве массива-члена из поля –

ответ

1

Что-то вроде этого (непроверенных код):

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->execute(array($user_id)); 

    return $stmt->fetchAll(PDO::FETCH_ASSOC); 
} 

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

    $response["error"] = false; 
    $response["tasks"] = $db->getAllUserTasks($user_id); 

     echoRespnse(200, $response); 
    }); 
+0

гм, теперь я получаю: Фатальная ошибка: Вызов неопределенной метод mysqli_stmt :: fetchAll() в /home/agroagro/public_html/agroMobile/include/DbHandler.php на линии
LaraBeginer

+0

@LaraBeginer I использовал PDO в моем примере, поскольку он выглядел так, будто вы использовали PDO ... С mysqli синтаксис должен немного отличаться, но принцип остается тем же ... Загрузите результаты в метод 'getAllUserTasks()', добавьте их в '$ response [" tasks "]' в другой части вашего кода. – RichardBernards

+0

обновить код – LaraBeginer

Смежные вопросы