Вы смешиваете несколько способов сделать готовые заявления.Попробуйте это:
// You could have your values in variables (or hardcoded)
$offset = 0;
$limit = 5;
$statement = $pdo->prepare('SELECT * FROM livro ORDER BY id OFFSET :offset ROWS FETCH NEXT :limit ROWS ONLY');
// Next you need to bind the values
$statement->bindValue(':offset', (int) $offset, PDO::PARAM_INT);
$statement->bindValue(':limit', (int) $limit, PDO::PARAM_INT);
// Now execute your statement
$statement->execute();
Когда вы используете ?
вместо чего-то вроде :limit
, вы можете затем передать массив значений для выполнения, и он будет обрабатывать привязку автоматически - но этот способ позволяет вампринудительно введите тип данных.
Подробнее: https://www.php.net/manual/en/pdo.prepared-statements.php
Что касается вашего комментария, вы можете попробовать следующее, но если я правильно помню, когда в последний раз я пробовал егос LIMIT и OFFSET это не сработает.Я полагаю, что-то нехорошее в реализации.В любом случае, попробуйте:
$offset = 0;
$limit = 5;
$q = "SELECT * FROM livro ORDER BY id OFFSET ? ROWS FETCH NEXT ? ROWS ONLY";
$stmt = $pdo->prepare($query);
$stmt->execute([$offset, $limit]);