Задать вопрос

Ошибка «PHP Fatal error: Call to undefined method mysqli_stmt::get_result()». Есть идеи как решить?

Решил тут на выходных поизучать разные готовые скрипты, предоставляющие функционал API-взаимодействия. Наткнулся на этот с интересным для меня функционалом:
How to create REST API for Android ... – Day 1
How to create REST API for Android ... – Day 2
Архив на ЯДиске или на или на сайте автора.


Но в конечном итоге при запросе GET localhost/task_manager/v1/tasks HTTP Headers Authorization "Value api key", который должен быть выдать список всех созданных сообщений - получаю ответ "500 Internal Server Error".
Изучение лога ошибок сервера дает результат: "PHP Fatal error: Call to undefined method mysqli_stmt::get_result() in /home/.../include/DbHandler.php on line 268".

Ниже - листинг кода:
v1/index.php
136 /**
137  * Listing all tasks of particual user
138  * method GET
139  * url /tasks          
140  */
141 $app->get('/tasks', 'authenticate', function() {
142             global $user_id;
143             $response = array();
144             $db = new DbHandler();
145 
146             // fetching all user tasks
147             $result = $db->getAllUserTasks($user_id);
148 
149             $response["error"] = false;
150             $response["tasks"] = array();
151 
152             // looping through result and preparing tasks array
153             while ($task = $result->fetch_assoc()) {
154                 $tmp = array();
155                 $tmp["id"] = $task["id"];
156                 $tmp["task"] = $task["task"];
157                 $tmp["status"] = $task["status"];
158                 $tmp["createdAt"] = $task["created_at"];
159                 array_push($response["tasks"], $tmp);
160             }
161 
162             echoRespnse(200, $response);
163         });


include/DbHandler.php
260     /**
261      * Fetching all user tasks
262      * @param String $user_id id of the user
263      */
264     public function getAllUserTasks($user_id) {
265         $stmt = $this->conn->prepare("SELECT t.* FROM tasks t, user_tasks ut WHERE t.id = ut.task_id AND ut.user_id = ?");
266         $stmt->bind_param("i", $user_id);
267         $stmt->execute();
268         $stmt->get_result();
269         $stmt->close();
270         return $tasks;
271     }


Буду рад совету с подсказкой как убрать эту ошибку.
  • Вопрос задан
  • 5103 просмотра
Подписаться 2 Оценить 1 комментарий
Решения вопроса 1
WestTrade
@WestTrade Автор вопроса
Вопрос закрыт, незнакомый иностранный товарищ помог.

/**
 * Listing all tasks of particual user
 * method GET
 * url /tasks          
 */
$app->get('/tasks', 'authenticate', function() {
            global $user_id;
            $response = array();
            $db = new DbHandler();

            // fetching all user tasks
            $result = $db->getAllUserTasks($user_id);
            
            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);
            }
        });


/**
     * Fetching all user tasks
     * @param String $user_id id of the user
     */
	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()) {
				$items = $res = array();
				
				$stmt->bind_result($id, $task, $status, $created_at);
				
				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;
			}
		}
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
FanatPHP
@FanatPHP
Чебуратор тега РНР
Буду рад совету с подсказкой как убрать эту ошибку.

Гулить. Пробовал?

Код, кстати, писал типичнейший похапешник.
Там где можно написать одну строку, он пишет 10.
Весь код реально можно сократить в 10 раз.

Короче, ответ на вопрос в заголовке гуглится за 5 сек.
Ответ на вопрос в теле поста: выброси это индусское поделие, не надо его изучать. Его аффтар - дебил. Не пей их этого корытца - таким же станешь.
В итоге задача изучения этого конкретного скрипта решена - его изучать не надо.
Ответ написан
SagePtr
@SagePtr
Еда - это святое
Могу посоветовать выкинуть mysqli и юзать PDO. Там это решается практически одной строчкой. Ну максимум двумя)
Ответ написан
@Barmunk
Я тут смотрю, снобизм зашкаливает.

Решения 2
Поставить модуль mysqlnd на сервер, чтобы заработал $stmt->get_result();
Или воспользоваться одним из костылей stackoverflow.com/a/28622062
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы