Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: :max
Здравствуйте, пишу сайт для себя в учебных целях. Создал переменную $max которая отвечает за отображение количества постов на главной странице:
public function postsList($route) {
$max = 1;
$params = [
'max' => $max,
'start' => ((($route['page'] ?? 1) - 1) * $max),
];
return $this->db->row('SELECT * FROM posts ORDER BY id DESC LIMIT :max, :start', $params);
}
Выходит фаталка:
Fatal error: Uncaught PDOException: SQLSTATE[42601]: Syntax error: 7 ОШИБКА: синтаксис LIMIT #,# не поддерживается
LINE 1: SELECT * FROM posts ORDER BY id DESC LIMIT $1, $2 ^ HINT: Используйте отдельные предложения LIMIT и OFFSET.
in /var/www/test1.com/application/lib/Db.php:30
Stack trace:
#0 /var/www/test1.com/application/lib/Db.php(30):
PDOStatement->execute()
#1 /var/www/test1.com/application/lib/Db.php(36): application\lib\Db->query()
#2 /var/www/test1.com/application/models/Main.php(37): application\lib\Db->row()
#3 /var/www/test1.com/application/controllers/MainController.php(14): application\models\Main->postsList()
#4 /var/www/test1.com/application/core/Router.php(53): application\controllers\MainController->indexAction()
#5 /var/www/test1.com/index.php(17): application\core\Router->run()
#6 {main} thrown in /var/www/test1.com/application/lib/Db.php on line 30
Если убрать LIMIT:
return $this->db->row('SELECT * FROM posts ORDER BY id DESC', $params);
То тоже фаталка:
Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: :max in /var/www/test1.com/application/
lib/Db.php:27
Stack trace:
#0 /var/www/test1.com/application/lib/Db.php(27): PDOStatement->bindValue()
#1 /var/www/test1.com/application/lib/Db.php(36): application\lib\Db->query()
#2 /var/www/test1.com/application/models/Main.php(37): application\lib\Db->row()
#3 /var/www/test1.com/application/controllers/MainController.php(14): application\models\Main->postsList()
#4 /var/www/test1.com/application/core/Router.php(53): application\controllers\MainController->indexAction()
#5 /var/www/test1.com/index.php(17): application\core\Router->run()
#6 {main} thrown in /var/www/test1.com/application/lib/Db.php on line 27
функция которая валидирует (в Db.php):
public function query($sql, $params = []) {
$stmt = $this->db->prepare($sql);
if (!empty($params)) {
foreach ($params as $key => $val) {
if (is_int($val)) {
$type = PDO::PARAM_INT;
} else {
$type = PDO::PARAM_STR;
}
(27 строчка->) $stmt->bindValue(':'.$key, $val, $type);
}
}
(30 строчка->) $stmt->execute();
return $stmt;
}
Помогите пожалуйста разобраться, почему $max = 1 Invalid parameter number и как правильно задать LIMIT
База pgsql, php - 8.2.