Obsługa baz danych z PDO, Szybki kurs operowania bazą danych przy użyciu rozszerzenia PDO |
Obsługa baz danych z PDO, Szybki kurs operowania bazą danych przy użyciu rozszerzenia PDO |
18.08.2013, 00:37:34
Post
#1
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 11.05.2013 Ostrzeżenie: (0%) |
Tradycyjny i popularny sposób łączenia z bazą danych przy pomocy mysql_* dawno stał się przestarzały. Teraźniejszość z PHP daje nam do wyboru 2 rozszerzenia, które są dużo lepszą alternatywą niż dotychczasowa metoda. Mowa o MySQLi oraz PDO.
Przedstawmy zalety i wady tego rozszerzenia w porównaniu z MySQLi:
Bez względu na to co wybierzesz i tak będzie to lepszy sposób niż stare mysql_* 1. Pierwszą czynnością będzie ustanowienie nowego połączenia. Najprościej zrobimy to w ten sposób:
mysql: definiuję system bazy danych, na którym będziemy opierać swoje działania. Dalej podajemy host, nazwę bazy, ustalamy na szybko kodowanie (utf8) oraz wpisujemy login użytkownika + jego hasło. Blok try { ... } catch { ... } po prostu obsługuję zaistniałe błędy. Pomiędzy klamrami od try zamieszczamy cały skrypt naszej strony, a w catch ustalamy sposób raportowania błędów. Robimy to poprzez wyjątek PDOException, który zwraca nam kilka możliwych metod. Skorzystaliśmy z getMessage() przechowującą pełną informację o błędzie. Co należy wiedzieć o PDOException? Jest na tyle fajne, że nie musimy umieszczać dotychczasowego or die mysql_error.. a jedną linijką dostaniemy wszystkie informację. Choć kod działa i dodatkowo prosto, to nie oznacza, że w pełni swoich możliwości. Wprowadźmy parę zmian:
Dodaliśmy kilka parametrów i przy okazji przedstawiłem sposób zamieszczania zmiennych w połączeniu. 2. Będąc już połączonym z bazą danych, przyszedł czas na parę zapytań. Odpowiednikiem mysql_query() jest query():
Jak widać nie ma tu praktycznie nic nowego. Omówić należy closeCursor(). Używamy go wtedy, gdy wykonamy zapytanie typu SELECT, a zaraz po nim chcemy wykonać inne zapytanie POBIERAJĄCE dane. Wtedy zamykamy tzw. kursor zapytania. Jest wiele teorii, dla których ten zapis powinien być stosowany. W sieci spotkamy się z tym, że pozwala to nadać większej kompatybilności między różnymi interfejsami, a nawet, iż przyśpiesza to działanie, choć osobiście nie sprawdzałem różnic.. 3. Należy zwrócić uwagę, że polecenia query() użyjemy tylko do zapytań SELECT, a wszelkie inne jak UPDATE, DELETE, INSERT itp. zamieszczamy w exec():
W przeciwieństwie do query() metoda exec() zwraca liczbę, a dokładniej liczbę zoperowanych rekordów. Przykład:
4. Nie pokazaliśmy jeszcze jak pobrane dane przy użyciu query() przypisać do elementu dokumentu:
Proste? Proste fetch() może przyjmować jeszcze parametr ustalający sposób zwracanych danych. Dostępne są m.in:
A tak wygląda fetchowanie z wykorzystaniem pętli (przykład na liście graczy z levelem większym lub równym 50):
Warto napisać o sposobie wyświetlania liczby pobranych rekordów:
5. Bindowanie danych, a mówiąc polskim odpowiednikiem: podpinanie danych. To jedna z największych zalet PDO, a zarazem wnosząca największą ze zmian w zapisie kodu. Na czym ono polega? Nie wykonujemy od razu zapytania, lecz najpierw je pod to przygotowujemy. Ustalamy dane, które mają ulec filtracji i dopiero teraz możemy je wykonać. Przyjmijmy, że mamy formularz logowania i chcemy sprawdzić istnienie danego konta. W tym celu wykonujemy do bazy danych zapytanie, mające na celu odnalezienie konta o wprowadzonym nicku.
Powyższy zapis naraża bezpieczeństwo naszej aplikacji na katastrofalne straty. Potencjalny hacker wykorzystujący takie nie zabezpieczone dane może wykonać dosłownie KAŻDE zapytanie! W tym usunąć użytkowników, a także całą bazę.. Jak sobie z tym poradzić? Nie jest to trudne, a dzięki PDO wręcz banalne. Każde dane otrzymywane od użytkowników (zmienne super globalne GET, POST, ale także ciastka i sesje) odkazić z potencjalnego niebezpieczeństwa. Po prostu sprawdzić, czy nie zawierają one cudzysłowów, kodu html/js i innego świństwa, które należałoby zamienić. Nowy zapis ostatniego kodu powinien mieć taką formę:
bindValue przyjmuję 3 parametry:
Jak widać w 3 parametr (kąt filtracji) podaliśmy akurat PDO::PARAM_STR, co oznacza, że PDO ma filtrować odebrane dane jako ciąg znaków. Drugą wartością dla tego parametru może być PDO::PARAM_INT, czyli filtracja dla liczb. Inne znajdziemy >tutaj<. Bindować możemy nie tylko SELECT, ale i całą resztę W celach lepszego zrozumienia dam kolejny przykład. Panel administratora wyświetlający adresy email graczy o podanym levelu i klasie postaci.
Bindowanie nie ma w sobie trimowania (usuwania z początku i końca linii białych znaków) dlatego przy klasie postaci (ogólna tendencja głównie do stringów) użyliśmy jeszcze funkcji trim(). Nie wspomniałem o przydatnej funkcji, która zwróci numer id ostatnio dodanego wiersza przez polecenie INSERT.
Po więcej wiedzy warto zajrzeć oczywiście do manuala. Przepraszam, jeśli temat wykracza poza tematykę działu, ale lubię się czymś dzielić, a poza tym nie znalazłem tu innego działu do zamieszczenia tego Zapraszam do dyskusji i krytyki tego co wybazgrałem, sam chętnie dowiem się nowych rzeczy. Ten post edytował SlimShady 18.08.2013, 00:39:10 -------------------- wszystkie drogi prowadzą do manuala :3
|
|
|
18.08.2013, 10:59:50
Post
#2
|
|
Grupa: Zarejestrowani Postów: 4 298 Pomógł: 447 Dołączył: 16.11.2006 Ostrzeżenie: (0%) |
A czym to się różni od http://pl.wikibooks.org/wiki/PHP/Biblioteka_PDO ?
-------------------- Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta). |
|
|
19.08.2013, 19:29:41
Post
#3
|
|
Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) |
Dobrze opisane
Literówka w 3. kodzie CloseCursos |
|
|
26.08.2013, 13:19:08
Post
#4
|
|
Grupa: Zarejestrowani Postów: 515 Pomógł: 63 Dołączył: 27.08.2012 Ostrzeżenie: (0%) |
ja, który zawsze znajdzie wymówkę przed pisaniem w oop, zostałem w końcu łopatologicznie uświadomiony jak korzystać z tego całego PDO ! wielki + ! Robiłem juz pare podeść ale bez skutku. Po obiedzie lece orać kod
edit: Z mojej strony prośba do administracji, żeby wyróżnić ten poradnik, na bank nie raz zajrze Ten post edytował gitbejbe 26.08.2013, 13:21:57 |
|
|
Wersja Lo-Fi | Aktualny czas: 26.09.2024 - 12:53 |