![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 28.05.2011 Ostrzeżenie: (0%) ![]() ![]() |
Na samym początku wypada się przywitać co też czynię, jako że jestem świeżo po rejestracji na forum. Mam też nadzieję, że nie umknął mi żaden punkt regulaminu i na starcie nie popełniłem jakiegoś "wykroczenia" zamieszczając pierwszy post.
A teraz do rzeczy: Od dzisiaj studiuję rozszerzenie PDO. Napisałem prostą klasę licznika odwiedzin odpornego na odświeżanie strony. Dane licznika przechowywane są w bazie danych. Konstruktor klasy tworzy nową tabelę jeśli takowa nie istnieje. Więcej szczegółów w komentarzach do metod. Proszę doświadczonych programistów o: 1. ocenę kodu; 2. wskazówki na co zwracać uwagę; 3. ocenę pod kątem bezpieczeństwa (czy takie wykorzystanie PDO utrudnia SQL Injection?) 4. co można zoptymalizować; 5. opinie czy takie wykorzystanie funkcji unset jest korzystne/dobre, czy też zbędne/złe? 6. Co sądzicie o PDO? Czy pod względem wygody/wydajności/bezpieczeństwa jest lepsze od innych metod? Co polecacie? Każda konstruktywna krytyka jest mile widziana. Oto kod:
Sposób użycia:
Ten post edytował gregherb 28.05.2011, 21:57:20 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 304 Pomógł: 51 Dołączył: 4.02.2005 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Po co korzystasz z unset? Php ma gc, więc jeśli zmienna wyjdzie poza zakres to pamięć zostanie zwolniona - niepotrzebne zaciemnianie kodu.
Korzystasz z prepared statements, lecz w ogóle nie wykorzystujesz ich zalet. Masz na krzyż 4 zapytania, które różnią się tylko parametrem, przygotuj sobie 4 obiekty prepared statement dla każdego z zapytań i te obiekty wykorzystuj do wykonywania zapytań, a nie twórz ich non stop za każdym razem. Będziesz musiał wykorzystać placeholdery (np. w postaci znaku zapytania), a wartosci przekazywać do metody execute - tak też powinno się robić nawet gdy docelowo obiekt PDOStatement ma wykonać tylko jedno zapytanie. Klasa counter nie powinna nawiązywać połączenia z bazą danych, a dostać już gotowe połączenie. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 28.05.2011 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za spostrzeżenia!
(..) przygotuj sobie 4 obiekty prepared statement dla każdego z zapytań i te obiekty wykorzystuj do wykonywania zapytań Czyli w tym konkretnym przypadku powinienem przygotować po jednym obiekcie dla zapytań select, update, insert, create? Czy tak? Klasa counter nie powinna nawiązywać połączenia z bazą danych, a dostać już gotowe połączenie. W tym miejscu nie byłem pewien, czy Counter powinien sam łączyć się z bazą. Dzięki za wyjaśnienie! Czy powinienem przekazywać do niego gotowe połączenie w postaci obiektu PDO? Jeszcze raz dzięki za odpowiedź i miłej niedzieli. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 8.10.2025 - 03:44 |