Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]PDO i dynamiczne składanie zapytania
elmozaur
post 13.01.2014, 12:33:15
Post #1





Grupa: Zarejestrowani
Postów: 518
Pomógł: 18
Dołączył: 21.07.2008

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


witam.
Zaczynam przepisywanie pewnego programiku na PDO i niestety miao być łatwiej a jest trudniej. Problem dotyczy dynamicznego tworzenia zapytania.
Chciałbym aby pytanie stworzone zostało na podstawie tablicy i iteracji po niej.

  1. <?php
  2. $tablica = array('1','2','3','4');
  3. $sql = "SELECT id, name, value FROM tresc WHERE ";
  4. $q = $db->prepare($sql);
  5.  
  6. foreach($tablica as $idk)
  7. {
  8. $sql .= "id = :idk OR ";
  9. $q->bindValue(':idk', $idk, PDO::PARAM_INT);
  10. }
  11.  
  12. $sql = substr($sql, 0, -4);
  13. $q->execute();
  14. $gotowe = $q->fetchAll();


Jesli wiem jakie wartosci chce wrzucic do zapytania to wszystko da sie zrobic. Co jesli nie wiem ile danych bedzie w zapytaniu i musze to stworzyc dynamicznie ?
za pomoc z gory dziekuje i pozdrawiam
G
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
nospor
post 13.01.2014, 12:36:32
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Najpierw robisz PREPARE na $sql, a dopiero potem w petli to $sql dynamicznie tworzysz.... naprawde nie widzisz to ewidetnego bledu LOGICZNEGO?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Crozin
post 13.01.2014, 13:05:08
Post #3





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

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


1. Skorzystaj z WHERE id IN(...) zamiast bezsensownej serii OR-ów.
2. Niestety PDO nie pozwala na podpięcie całej tablicy, będziesz musiał najpierw przygotować zapytanie w stylu ...WHERE id IN(?, ?, ?, ?, ..., ?, ?, ?, ?).
3. Możesz skorzystać z Doctrine'owskego DBAL-a, który rozwiązuje pow. problem oraz udostępnia trochę przyjemnych dodatków.
Go to the top of the page
+Quote Post
elmozaur
post 13.01.2014, 13:28:56
Post #4





Grupa: Zarejestrowani
Postów: 518
Pomógł: 18
Dołączył: 21.07.2008

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


nospor: nie no wiem ze to co napisalem jest zle i nie ma sensu. chodzilo mi tylko i wylacznie o zobrazowanie problemu ktory chce rozwiazac.
Tak jak wspomnialem przepisuje programik na PDO i staram sie przepisac to co w tej chwili dziala na nowy system.

Crozin: wlasnie szukalem takiej podpowiedzi.

Dla innych poszukujacych rozwiazania tego problemu podaje rozwiazanie:
  1. $tablica = array('1','2','3','4');
  2. $place_holders = implode(',', array_fill(0, count($tablica), '?'));
  3. $sth = $dbh->prepare("SELECT id, name FROM contacts WHERE id IN ($place_holders)");
  4. $sth->execute($tablica);


pozdrawiam
G

Go to the top of the page
+Quote Post
nospor
post 13.01.2014, 13:53:17
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
nospor: nie no wiem ze to co napisalem jest zle i nie ma sensu. chodzilo mi tylko i wylacznie o zobrazowanie problemu ktory chce rozwiazac.
No ale w moim poscie padla przeciez odpowiedz co robisz zle i posrednio jak to nalezy poprawic.

crozin napisal to samo co ja, tylko dorzucil, ze zamiast OR masz uzyc IN, ale tak czy siak wpierw masz zbudowac cale zapytanie a dopiero potem PREPARE.

Tak czy siak problem rozwiazany.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
elmozaur
post 15.01.2014, 12:14:18
Post #6





Grupa: Zarejestrowani
Postów: 518
Pomógł: 18
Dołączył: 21.07.2008

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


dziekuje
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 04:28