@Kostik_1993
Fullstack Web Developer | PHP | Laravel | Vue.js

Как сделать грамотную постраничную навигацию на PDO с подготовленными запросами?

Перевожу свой сайт на PDO, теперь встал вопрос, как получить количество записей при подготовленном запросе.

Например есть запрос вида
$result = $PDO->prepare("
SELECT * FROM board_post, model, marka WHERE model.id_model=board_post.id_model 
AND board_post.id_marka=marka.id_marka 
AND board_post.id_marka= :brand 
AND board_post.id_model= :model 
AND board_post.price>= :pricemin 
AND board_post.price<= :pricemax AND board_post.year>= :yearmin 
AND board_post.year<= :yearmax 
ORDER BY date DESC");

if($id_marka!='' && $id_marka > 0) echo $result->bindParam(':brand', $id_marka);
if($id_model!='' && $id_model > 0) echo $result->bindParam(':model', $id_model);
if($pricemin > 0) echo $result->bindParam(':pricemin', $pricemin);
if($pricemax > 0) echo $result->bindParam(':pricemax', $pricemax);
if($yearmin > 0) echo $result->bindParam(':yearmin', $yearmin);
if($yearmax > 0) $result->bindParam(':yearmax', $yearmax);

$result->execute();


Как получить количество строк которые вернул запрос? Весь день ищу но кроме как примера на простом не подготовленном query запросе найти не могу
  • Вопрос задан
  • 2954 просмотра
Пригласить эксперта
Ответы на вопрос 2
FanatPHP
@FanatPHP
Помогаю и новичкам, и старичкам
а какая разница - подготовленный запрос, или неподготовленный?

И что означает этот странный код?
if($pricemin > 0) echo $result->bindParam(':pricemin', $pricemin);


пример пагинации с подготовленными выражениями есть здесь: phpfaq.ru/paginator#new
библиотека, правда, более удобная чем, ПДО, но принцип тот же.

Чтобы не собирать условия в ПХП, можешь написать в запрос так
SELECT * FROM board_post, model, marka WHERE model.id_model=board_post.id_model 
AND board_post.id_marka=marka.id_marka 
AND (:brand    = 0 OR id_marka = :brand) 
AND (:model    = 0 OR id_model = :model) 
AND (:pricemin = 0 OR price   >= :pricemin) 
AND (:pricemax = 0 OR price   <= :pricemax) 
AND (:yearmin  = 0 OR year    >= :yearmin) 
AND (:yearmax  = 0 OR year    <= :yearmax) 
ORDER BY date DESC
Ответ написан
@tosha_lol_daaa
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы