Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Konstrukcja zlozonego zapytania w PDO
-tr3v0rr-
post
Post #1





Goście







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 ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
mlawnik
post
Post #2





Grupa: Zarejestrowani
Postów: 455
Pomógł: 49
Dołączył: 12.04.2010

Ostrzeżenie: (0%)
-----


  1. if( ! isset( $_GET['id_strony'] ) || $_GET['id_strony'] == ''){
  2.  
  3. //tutaj zapytanie select *
  4.  
  5. }
  6.  
Go to the top of the page
+Quote Post
-Gość-
post
Post #3





Goście







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
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #4





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


  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']);
Go to the top of the page
+Quote Post
Crozin
post
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


  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. }

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.09.2025 - 17:45