formからカテゴリーや検索キーワード、ページなどをGETで受け取り、受け取った内容によってSQL文を生成しています。
一応思った通りの動きにはなりますが、この書き方が良い書き方とはとても思えません。
SQL文を繋げる際にWHEREで連結していないとANDで繋げていけないところも不便です。
formから受け取った内容にyotteSQL文を生成するということは比較的多いパターンかと思うのですが、みなさんだったらどのようき書きますか?
悪い点、改善点、全然違う方法、参考になるページ、アドバイスなど頂けましたら大変ありがたいです。
よろしくお願いします。
コード
PHP
1<?php 2 3class Product() { 4 5 protected $page = 1; 6 protected $max_display = 200; 7 protected $start_display = 0; 8 protected $default_category = 1; 9 10 public function getProducts($get = null) { 11 12 $sql = "SELECT * FROM product "; 13 14 if (isset($get['category']) && $get['category'] !== '') { 15 $category = $get['category']; 16 $sql .= "WHERE category = $category "; 17 } else { 18 $sql .= "WHERE category = $default_category "; 19 } 20 21 if (isset($get['keyword']) && $get['keyword'] !== '') { 22 $keyword = $get['keyword']; 23 $sql .= "AND (number LIKE '%$keyword%' OR name LIKE '%$keyword%')"; 24 } 25 26 $sql .= "ORDER BY number "; 27 28 $query = $this->dbh->prepare($sql); 29 $query->execute(); 30 $count = $query->rowCount(); 31 $max_page = ceil($count/$this->max_display); 32 33 if (isset($get['page']) && $get['page'] !== '') { 34 $this->page = $get['page']; 35 $this->start_display = ($this->page - 1) * $this->max_display; 36 } 37 38 $products['max_page'] = $max_page; 39 40 $end_display = $this->start_display + $max_display; 41 42 $sql .= "LIMIT " . $this->start_display . ", " . $end_display; 43 $query = $this->dbh->prepare($sql); 44 $products = $query->fetchAll(); 45 46 return $products; 47 } 48 49} 50 51 52
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/05 02:38