![]() |
![]() ![]() |
![]() |
--piotr-- |
![]()
Post
#1
|
Goście ![]() |
Uczac sie PDO trafilem na problem.
Otóz chce zadac zapytanie przez prepare/execute typu: SELECT * WHERE id = :id AND kolumna = :kolumna i teraz bindujac obie wartosci wszystko jest cacy. Kiedy warunki w zapytaniu chce generowac dynamicznie pojawia się problem. Załózmy ze w zaleznosci od innych zmiennych potrzebuje do powyzszego zapytania dodac kolejny warunek: SELECT * WHERE id = :id AND kolumna = :kolumna AND filtr = 1 Z mysql_query robilem to sklejając zapytanie w php. W pdo jest problem, poniewaz powyzsze zapytanie w takiej formie ( tzn. kolumna filtr ma stala wartosc '1') nie wykonuje się poprawnie. Jest na to jakis sposob? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
Nikt nie broni ci tego skleić
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
To moze pokaz jaki masz teraz kod, jak generujesz te zapytanie, bo ciezko teraz jest wywrozyc co zrobiles źle.... Zbliza sie weekend i wrozki poleciały na łysą góre
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
-Gość- |
![]()
Post
#4
|
Goście ![]() |
Podałem dokładnie jaki problem się pojawia. Przy doklejeniu do zapytania warunku ' AND filtr = 1' <-- dokładnie w takiej formie, baza odpowiada mi tak jakby całkowicie w warunku nie była uwzględniona kolumna filtr, (czyli zwraca dane z filtr = 2, 3, 5 itp)
Rozumiem ze takie zapytanie w prepare jest poprawne? SELECT * WHERE id = :id AND kolumna = :kolumna AND filtr = 1 Czyli ze nie wszystkie kolumny musze bindowac? W jaki sposób zrobić jeszcze jeżeli dynamicznie dopisany warunek tez chce bindowac? Dodatkowe IF w ktorych sa bindValue ? Bo jezeli binduje po :serial a tego :serial nie ma to wywala błąd. |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
Nie trzeba bindować wszystkich. Jak bindować dodatkowy
SELECT * WHERE warunek = :wartosc ->bindValue(':wartosc', $jakaśZmienna) |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Musisz dynamicznie zbudować zapytanie oraz listę parametrów dla niego:
|
|
|
-Gość- |
![]()
Post
#7
|
Goście ![]() |
Dzieki Crozin - nie wiedziałem, ze można bindowac przez execude. Tylko nie widze jak zbindowac po INT albo STR tak jak jest w bindValue?
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
PDOStatement::execute traktuje wszystkie parametry jako stringi. Jeżeli chciałbyś jednak móc dokładnie określić co jest przesyłane, musiałbyś to trochę rozbudować, do czegoś mniej-więcej takiego:
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 19:39 |