2 ORDER BY whenSent DESC"; //count how many games without offset/limit $messagescount = $pdo->prepare($query); $messagescount->bindParam(':u', $keywordq, PDO::PARAM_STR); $messagescount->execute(); $messagescount = $messagescount->rowCount(); //data for pages $total = $messagescount; $pages = ceil($total / $limit); $offset = ($page - 1) * $limit; // Prepare the paged query (if keyword isnt empty, it will be used) $messages = $pdo->prepare($query . ' LIMIT :limit OFFSET :offset'); $messages->bindParam(':u', $keywordq, PDO::PARAM_STR); $messages->bindParam(':limit', $limit, PDO::PARAM_INT); $messages->bindParam(':offset', $offset, PDO::PARAM_INT); $messages->execute(); //final check to see if page is invalid if ($pages > 0) { if ($page > $pages) { http_response_code(400); } } //construct the json array $jsonData = array( "pageCount" => $pages, "pageResults" => (int)$messages->rowCount() ); foreach($messages as $message) { $userid = $message['whoSent']; $gameAssetId = $message['gameAssetId']; $loggedMessage = $message['message']; $whenlogged = date("m/d/Y", $message['whenSent']); $loggedMessages = array( "userid" => $userid, "username" => getUsername($userid), "thumbnail" => getPlayerRender($userid), "placeName" => getAssetInfo($gameAssetId)->Name, "placeId" => $gameAssetId, "message" => $loggedMessage, "date" => $whenlogged ); array_push($jsonData, $loggedMessages); } // ... die(json_encode($jsonData));