// Created on savesnippets.com ยท https://savesnippets.com/hAoEifW6qCbZp5 prepare("SELECT COUNT(*) FROM ($sqlBody) AS _t") ->execute($params) ? (int)$db->query("SELECT FOUND_ROWS()")->fetchColumn() : 0; // Simpler & portable: separate COUNT query $countStmt = $db->prepare("SELECT COUNT(*) FROM ($sqlBody) AS _t"); $countStmt->execute($params); $total = (int)$countStmt->fetchColumn(); $stmt = $db->prepare("$sqlBody LIMIT $perPage OFFSET $offset"); $stmt->execute($params); return [ 'rows' => $stmt->fetchAll(), 'page' => $page, 'per_page' => $perPage, 'total' => $total, 'pages' => (int)ceil($total / $perPage), ]; } $result = paginate($db, "SELECT id, name FROM users WHERE active = ?", [1], page: 2);