![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 84 Pomógł: 0 Dołączył: 12.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam. Chcę stworzyć klasę do połączenia SQL w której będą też metody do zapytań jednak zależy mi na stworzeniu bardzo wydajnej klasy, a co więcej, żeby cały kod był dobrej jakości dlatego też ja mam pomysł i jakiś zalążek wiedzy, wy za to duże doświadczenie więc liczę, że mi trochę pomożecie (IMG:style_emoticons/default/smile.gif) Głównym motywem na chwile obecną jest stworzenie metod, które będą generowane w zależności od tego co będziemy chcieli osiągnąć. Poniżej zamieszczę kod, który do tej pory napisałem, a pod nim pytania.
1. Chciałem aby można było za pomocą jednej metody łączyć się z różnymi bazami dlatego zanim wywołamy metodę SQL_connect() dzięki konstruktorowi podajemy, która baza nas interesuje. Teraz pytanie czy rozwiązanie to jest dobre? Czy może lepiej było by usunąć konstruktor i nazwę bazy podać bezpośrednio do metody czyli: SQL_connect("nazwa_bazy")? 2. Jak wiadomo zanim wykonamy jakiekolwiek operacje na tabelach w bazie trzeba się połączyć z bazą więc łączenie z SQL MUSI się odbyć prawda? więc zastanawiam się czy by nie zrezygnować z metody SQL_connect() i całość kodu wstawić w konstruktor wyglądało by to tak:
Ma to sens? Mam jeszcze pytania odnośnie metody select_table() ale to innym razem. Jeśli macie ew. jakieś zastrzeżenia co do tego kodu to piszcie. Z góry dzięki (IMG:style_emoticons/default/smile.gif) |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Mam wrażenie, że sam sobie nieco utrudniasz życie. Nikt Ci nie każe preparować nazw tabel, ani nazw poszczególnych kolumn, gdyż - można powiedzieć, że - dane, które pochodzą od Ciebie są zaufane i można je spokojnie wstawiać (konkatenować) bezpośrednio do treści zapytań, uzyskując efekt, o którym wcześniej napisałeś (parametryzacja nazw kolumn i tabel), prosty przykład:
Preparowania i bindowania używa się na danych pochodzących z zewnątrz, w celu uniknięcia potencjalnego zagrożenia ze strony nieuczciwych użytkowników. Ponieważ nie można preparować nazw tabel (gdyż są one w zapytaniach quotowane) najlepiej bindować tylko te dane, co do których mamy pewność, że mogą stanowić potencjalne zagrożenie dla zapytania, czyli generalnie wszystko to, co pochodzi od użytkowników. A więc w przypadku wyciągania danych, bindujemy tylko cześć warunku następującą po WHERE, ewentualnie wartość LIMIT, jeżeli oczywiście limitujemy wyniki. Mam nadzieję, że nieco Ci wytłumaczyłem, na czym problem polega i podsunąłem odpowiednią wskazówkę, w jaki sposób można osiągnąć efekt, o który pytasz. Przyznam, że dawno nie korzystałem z "gołego" PDO, natomiast z tego, co pamiętam w Zendzie była klasa Zend_Db_Expr, która pozwalała na bezpośrednie parametryzowanie fragmentów zapytań np. new Zend_Db_Expr('COUNT(schema1_lines.id) AS lines')) dzięki czemu można było uniknąć quotowania. Ten post edytował darko 24.02.2011, 16:00:12 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.10.2025 - 12:15 |