Linkdump #66: My... my... MySQL!

Myślałem trochę nad całą serią wpisów w tej kategorii i zauważyłem, że bardzo mało (właściwie wcale nie ma) jest wpisów o bazach danych. Na blogu znajduje się już wiele tekstów z linkami o PHP, JavaScripcie i innych językach programowania, a bardzo mało o samych technologiach / narzędziach, które przy okazji wykorzystujemy. Aby to zmienić, dzisiejszy Linkdump jest poświęcony bazie danych MySQL, jako najpopularniejszej i wciąż ambitnie rozwijanej, pomimo przejęcia Suna przez Oracle.

Doctrine: Operator INDEX BY - indeksowanie wyników zapytania według wybranego pola.

Pobieranie informacji z baz(y) danych to jedna z podstawowych czynności, jaką wykonujemy podczas tworzenia różnego rodzaju stron internetowych. Aby uzyskać potrzebne dane w zdecydowanej większości przypadków wystarczy proste zapytanie SQL [w przypadku Doctrine możemy też wykorzystać język DQL]. Niektóre przypadki wymagają jednak potrzeba bardziej ambitnej ekwilibrystyki, aby przygotować odpowiedni zbiór rekordów. W dzisiejszym wpisie chciałbym pokazać jedną z możliwości biblioteki Doctrine - indeksowanie wyników zapytania według samodzielnie wybranego pola.

Linkdump #53: Ej, dżej, jQuery.

Pomimo upływu czasu i wielu zmian w środowiskach programistów stron internetowych, biblioteka jQuery zdaje się być cały czas najpopularniejszym rozwiązaniem ułatwiającym ich pracę. Mimo okrzyknięcia tej biblioteki “PHP4 JavaScriptu”, na pewno można się w niej doszukać wielu pozytywnych aspektów. W dzisiejszym Linkdumpie chciałbym po raz kolejny przedstawić kilka rzeczy pozwalających na odzyskanie wiary w jQuery.

(My)SQL: Jak znaleźć poprzedni i następny rekord w jednym zapytaniu?

Pracowałem ostatnio nad skryptem galerii w jednym z projektów i w pewnym momencie natrafiłem na problem polegający na wyświetlaniu w widoku pojedynczego zdjęcia linków kierujących do następnego i poprzedniego elementu. Nie jest to pierwszy raz, kiedy zostałem zmuszony do “poradzenia sobie” z tego typu sytuacją, dlatego uznałem, że warto opisać wykorzystane rozwiązanie na blogu. Standardowo mam nadzieję, że się przyda, zatem zapraszam do lektury. ;]

(My)SQL: Aktualizowanie pola typu TIMESTAMP.

Oprogramowanie komputera zawiera w sobie wiele pułapek, o których trzeba wiedzieć, żeby w nie nie wpaść. Szczęśliwym trafem jeszcze nie miałem okazji cierpieć przez opisywany dzisiaj problem - przeczytałem o nim podczas poszukiwania informacji na temat innego, który już opisałem na niniejszym blogu. Serwer SQL, a dokładnie MySQL, to jedno z najpopularniejszych rozwiązań tej klasy, a co za tym idzie pewnego rodzaju standard. W dzisiejszym wpisie chciałbym pokazać jeden z problemów, na jaki możemy się natknąć podczas pracy z bazą danych opartą właśnie o niego.

MySQL Workbench: Generowanie plików YAML dla Doctrine i symfony.

W codziennej pracy używamy wielu narzędzi wspomagających naszą pracę przy tworzeniu stron internetowych i wykonywaniu innych usług z tym związanych. Poczynając od IDE, poprzez różnego rodzaju narzędzia konsolowe, aż po wtyczki w przeglądarkach internetowych jesteśmy zależni od wielu tysięcy linii kodu, dzięki którym nasze życie jest o wiele łatwiejsze, niż w przypadku, kiedy musielibyśmy wykonać tą pracę sami. W dzisiejszym wpisie chciałbym pokazać jeden z niedawno poznanych sposobów na ułatwienie sobie życia podczas pracy z biblioteką Doctrine i frameworkiem symfony.

WAMP: Usuwanie komunikatów o błędach XDebug.

Zainstalowałem i skonfigurowałem dzisiaj najnowszą wersję serwera WAMP - 2.1e. O niektórych problemach związanych z jego działaniem pisałem już wcześniej, także temat ten jest Wam na pewno znany. W dzisiejszym wpisie chciałbym pokazać, w jaki sposób ukryć “pomarańczowe komunikaty” o błędach wykonania skryptu PHP, jakie serwuje nam debugger XDebug.

Wstęp.

Na początku należą się Wam przeprosiny za moje zapominalstwo. Obiecałem, że w piątek będą pojawiały się wpisy, aczkolwiek byłem dzisiaj tak pochłonięty działaniami na komputerze, że nawet nie zauważyłem, kiedy na zegarze wybiła druga nad ranem. Niniejszym sypię sobie popiół na głowę i obiecuję więcej tego błędu nie popełniać. W każdym razie wniosek jest taki, że blog żyje, a więc mogę spokojnie przejść do tematu. ;]

[(My)SQL] Pobieranie identyfikatora nowego rekordu bez wykonywania zapytania INSERT.

Witajcie jeszcze raz. ;] Jak mogliście zauważyć, ostatnio znalazło się na moim blogu kilka wpisów na temat pewnych problemów z językiem SQL, a konkretnie kilku sytuacji brzegowych, w których uzyskanie interesujących nas danych okazało się nietrywialnym zadaniem. Nie inaczej będzie też dzisiaj, jako, że czytając różne materiały w serwisach związanych z programowaniem trafiłem na problem pobierania identyfikatora nowego rekordu bez wykonywania zbędnego zapytania INSERT. Nie namyślając się długo dopisałem ten problem do listy pomysłów, a dzisiaj doczekał się on realizacji. ;] Zapraszam do lektury.

Wstęp.

Żeby zobrazować problem, przyjmijmy przykładową strukturę bazy danych. Załóżmy, że mamy tabelę użytkowników, przykładowo px_users:

[PHP] Przekazywanie tablic w żądaniu GET.
Ten pomysł “wisiał” na mojej liście rezerwowej przez dosyć długi czas, czekając na dobrą okazję do podjęcia tematu. Ze względu na to, że zwykle dzielę się z Wami rozwiązaniami napotkanych przeze mnie błędów / problemów, stwierdziłem, że czas na “coś nowego” - coś, co przynajmniej raz na jakiś czas przełamie schemat. Dzisiejszy wpis będzie więc całkowicie poświęcony pewnej ciekawej funkcjonalności, która może dość istotnie ułatwić obsługę skryptów. Wstęp. Buszując po bezkresach Internetu staram się zaobserwować możliwie jak najwięcej sposobów wykonania stron, zarówno od strony wizualnej [frontend - szablony], jak i tej bardziej “serwerowej” [backend - oczywiście na tyle, na ile się da].
[PHP, (My)SQL] Systemy uprawnień na stronach internetowych, część 0x03: Macierz uprawnień.

W ostatnich wpisach z tej serii skupialiśmy się na zarządzaniu uprawnieniami pewnych grup użytkowników naszej aplikacji. Obszary dostępu to nic innego jak podział na dwie sztywne grupy posiadające [lub nie] dostępu do pewnych zabezpieczonych elementów systemu, zaś poziomy to tylko wykorzystanie abstrakcji do złożenia w jednym miejscu wielu obszarów. Opisując te sposoby “celowo zapominałem” o tym, że nie zawsze da się podzielić użytkowników na odpowiednie grupy, ponadto nie zawsze nadane uprawnienia muszą być sztywne - czasem chcemy np. dać dodatkowo jednemu zaufanemu użytkownikowi dostęp do statystyk witryny, albo przeglądania artykułów - wtedy musielibyśmy stworzyć albo oddzielny obszar albo nowy poziom, który notabene zburzyłby dotychczas istniejącą strukturę. Co zrobić z takim problemem?

Wstęp.

Oczywiście potrzebujemy jeszcze innego, nowego systemu zarządzania uprawnieniami, który pozwoliłby na zachowanie istniejących zysków i przy okazji wyeliminowałby słabości tych, które testowaliśmy do tej pory. W szczególności powinien umożliwiać:
  • nadawanie indywidualnych uprawnień
  • nadawanie grupowych uprawnień
  • reagować na fakt posiadania uprawnienia przez użytkownika lub przypisanej mu grupy
Drodzy Czytelnicy, oto przed Wami najnowszy cud techniki - macierze uprawnień! Ale nie wyprzedzajmy zbytnio materiału - wszystko ma swoją kolej. ;]