Доброго времени форумчане! Пишу пагинацию для тестового задания в одну компанию. В задаче было вывести "задачи" с возможностью сортировки по имени пользователя, email по убыванию и возрастанию с пагинацией. Так же нужно отсеивать задачи по статусу "выполнено/невыполнено/все". Написал такую функцию для вывода. Ниже прикреплю функцию getAll() в которой и есть ошибка и сам класс. Буду благодарен, если сможете помочь!
public function getTasks($page, $sortBy, $sortDirection, $status, $perPage = 3){
$from = ($page - 1) * 3;
$to = $page * 3;
$totalCount = $this->db->getValue("SELECT COUNT(*) FROM `tasks`");
$totalPages = ceil($totalCount / 3);
$query = 'SELECT * FROM `tasks` ';
$queryArguments = [
'sortBy' => $sortBy,
'sortDirection' => $sortDirection,
'from' => $from,
'to' => $to,
];
if($status !== null){
$query .= 'WHERE `status` = :status ';
$queryArguments['status'] = $status;
}
$query .= 'ORDER BY :sortBy :sortDirection LIMIT :from, :to';
$tasks = $this->db->getAll($query, $queryArguments);
$tasksCount = count($tasks);
return [
'tasks' => $tasks,
'pagesCount' => $totalPages,
'totalTasksCount' => $totalCount,
'shownTasksCount' => $tasksCount,
];
}
Обертка для PDO:
<?php
namespace application\core\lib;
use PDO;
class Db
{
protected $db;
public function __construct()
{
$config = require '../application/configs/db.php';
if (!$this->db) {
try {
$this->db = new PDO('mysql:host=' . $config['host'] . ';dbname=' . $config['name'] . '', $config['user'], $config['password']);
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
} catch (\PDOException $e) {
exit('Database connecting error: ' . $e->getMessage());
}
}
}
........
public function getAll($query, $parameters = array())
{
$statementHandle = $this->db->prepare($query);
$statementHandle->execute((array) $parameters);
return $statementHandle->fetchAll(PDO::FETCH_ASSOC);
}
.........
}
Выдает ошибку:
Warning: PDOStatement::execute(): SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''0', '3'' at line 1 in /var/www/vhosts/jaxadam.kz/bjtst.jaxadam.kz/application/core/lib/Db.php on line 49
dump $query из первой функции:
string(70) "SELECT * FROM `tasks` ORDER BY :sortBy :sortDirection LIMIT :from, :to"