Я строю CRUD с чистым драйвером PHP + PDO Mysql.Проблемы с привязкой параметров PDO
У меня есть страница, в которой перечислены данные, содержащиеся в таблице БД, и я хочу реализовать некоторые фильтры, но я привязан к привязкам к PDO с динамическим запросом.
Например, этот код хорошо работает с $_GET["op"]
и без него.
$params = [];
$pag_query = "SELECT COUNT(*) FROM cells WHERE 1 ";
if(!empty($_GET["op"])){
$pag_query .= "AND op=:op ";
$params["op"] = $_GET["op"];
}
$stmt = db()->prepare($pag_query);
$stmt->execute($params);
$n_rows = $stmt->fetchColumn();
Но я не могу заставить этот запрос работать.
<?php
//some logic here to get $limit and $offset
$params["limit"] = $limit;
$params["offset"] = $offset;
$tbl_query = "SELECT * FROM cells WHERE 1 ";
if(!empty($_GET["op"])){
$tbl_query .= "AND op=:op ";
$params["op"] = $_GET["op"];
}
$tbl_query .= "ORDER BY cid LIMIT :limit OFFSET :offset";
//Prepare the query
$stmt = db()->prepare($tbl_query);
$stmt->execute($params);
$table = $stmt->fetchAll();
Это сообщение дает мне сообщение об ошибке.
Предупреждение: PDOStatement :: execute(): SQLSTATE [42000]: Ошибка синтаксиса или нарушение доступа: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования около '' 20 'OFFSET' 0 '' в строке 1 в C: \ xampp \ htdocs \ celldb \ manage.php в строке 64
Если я имитировать запрос на PhpMyAdmin это работает хорошо, и это также работает, если удалить if(!empty($_GET["op"])
дело и передать $limit
и $offset
использованием $stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
'$ pag_query' =' $ tbl_query' – cmorrissey
я написал здесь не так, но в моем коде был прав: P –
удивительно. .. переименовывать код вместо копирования и вставки :) – cmorrissey