Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Konstrukcja zlozonego zapytania w PDO
Forum PHP.pl > Forum > Przedszkole
tr3v0rr
Witam,

Zeby sobie ulatwic zycie poniewaz na wielu podstronach swojego systemu mam to samo zapytanie do wykonania ale z innymi parametrami musze napisac jeden plik ktory bedzie includowany i ktory bedzie generowal zapytanie na podstawie parametrow. Prawie wszystkie kolumny tabeli za poleceniem where beda okreslane dynamicznie. Nie byloby w tym nic trudnego gdyby nie to ze nie zawsze wszystkie beda wystepowac, a wiec jesli np
  1. $_GET['id_strony'] == 'wszystkie'

nie bedzie polecenia where `id_strony`=:id_strony poniewaz nie mam co tam wstawic. No i tutaj wlasnie zaczyna sie problem. Moge zrezygnowac z bindowania czego bardzo bym nie chcial albo skopiowac ten sam kod 8 razy i go przystosowac do kazdej podstrony co jest rowniez bez sensu bo przy zmianach musze edytowac 8 miejsc. Jakies pomysly ?
mlawnik
  1. if( ! isset( $_GET['id_strony'] ) || $_GET['id_strony'] == ''){
  2.  
  3. //tutaj zapytanie select *
  4.  
  5. }
  6.  
Gość
Hmm chyba dalem za malo informacji. Wychodzi wtedy tak:
  1. $zapytanie = $db -> prepare('select * from `baza` where `id_strony`=:id_strony limit 100');
  2. $zapytanie -> bindValue(':id_strony', $_GET['id_strony'], PDO::PARAM_INT);


Moze zle to rozkminiam ale mi z tego wychodzi:
  1. select * from `baza` where `id_strony`="" limit 100

wiec pobierze te rekordy w ktorych id_strony bedzie puste. Jesli sie myle poprawcie mnie prosze
b4rt3kk
  1. $query = "'select * from baza";
  2. if ($_GET['strona'] != '') $query .= " WHERE id_strony = :id_strony";
  3. $query .= " LIMIT 100";
  4. echo $query;


Bindowanie:

  1. if ($_GET['strona'] != '') $stmt -> bindParam(':id_strony', $_GET['id']);
Crozin
  1. $sql = 'SELECT ... FROM ... WHERE %s ORDER BY ...';
  2.  
  3. $whereClause = array();
  4. $parameters = array();
  5.  
  6. if (isset($_GET['id'])) {
  7. $whereClause[] = 'id = :id';
  8. $parameters['id'] = $_GET['id'];
  9. }
  10.  
  11. if (isset($_GET['range'])) {
  12. list($lower, $upper) = explode(',', $_GET['range']);
  13.  
  14. $whereClause[] = 'some_range BETWEEN :lower AND :upper';
  15. $parameters['lower'] = $lower;
  16. $parameters['upper'] = $upper;
  17. }
  18.  
  19. $sql = sprintf($sql, implode(' AND ', $whereClause));
  20.  
  21. $stmt = $pdo->perpare($sql);
  22.  
  23. foreach ($parameters as $key => $value) {
  24. $stmt->bindValue(':' . $key, $value);
  25. }

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.