Czasami zachodzi potrzeba pobrania z bazy danych rekordów bezpośrednio przed oraz po danym rekordzie. Ma to uzasadnienie na przykład w galerii zdjęć, gdzie chcemy użytkownikowi dać możliwość prostego przeglądania zdjęć. Oczywiście można to zrobić w sposób „łopatologoczny” za pomocą kilku zapytań do MySQL, jednak osobiście nie polecam takiego rozwiązania. Dzisiaj zaprezentuję w jaki sposób można zrobić to szybko i profesjonalnie.
Na samym początku musimy stworzyć tabelę, na której będziemy testować działanie naszego zapytania. Schemat wygląda następująco:
CREATE TABLE imiona (
id int PRIMARY KEY,
imie varchar(32) NOT NULL
);
INSERT INTO imiona VALUES (1, 'Ania');
INSERT INTO imiona VALUES (2, 'Kasia');
INSERT INTO imiona VALUES (3, 'Paweł');
INSERT INTO imiona VALUES (4, 'Natalia');
INSERT INTO imiona VALUES (5, 'Justyna');
INSERT INTO imiona VALUES (6, 'Adam');
INSERT INTO imiona VALUES (7, 'Krzysztof');
INSERT INTO imiona VALUES (8, 'Kazimierz');
INSERT INTO imiona VALUES (9, 'Piotrek');
INSERT INTO imiona VALUES (10, 'Jakub');
INSERT INTO imiona VALUES (11, 'Ewa');
INSERT INTO imiona VALUES (12, 'Kinga');
Oczywiście dane te są przykładowe. Można stworzyć dowolną strukturę, która pozwoli nam wygodnie przetrzymywać informacje.
Wiele z nas nie zdaje sobie sprawy z bezpieczeństwa naszej strony internetowej. Włamanie do serwisu może skończyć się w najlepszym przypadku skompromitowaniem, nieraz utratą całych danych. Podobnie jest w przypadku uszkodzeń serwera, czy po prostu przypadkowym usunięciem bazy danych. Nieraz nasz kilkuletni dorobek ginie w kilka sekund. Dobrym przykładem jest tu serwis społecznościowy ma.gnolia.com. Cała baza danych została zniszczona w wyniku uszkodzenia serwera. Niestety serwis zakończył swoja działalność.
Aby jednak nas nie spotkała taka „niespodzianka” powinniśmy regularnie tworzyć kopie zapasowe – nie tylko plików, ale i bazy danych. Najwygodniejszym rozwiązaniem jest chyba użycie wbudowanej w PHPMyAdmin’a funkcji „Eksportuj”. Jednak każdorazowe wchodzenie, logowanie i eksportowanie jest trochę nużące i z czasem kłopotliwe. Możemy jednak zautomatyzować ten proces, używając np komendy system() z odpowiednimi parametrami. Lecz nie jest to najlepsze rozwiązanie, gdyż większość hostingów blokuje tą funkcję ze względów bezpieczeństwa. Co więc nam pozostało? Skorzystanie z gotowych rozwiązań, albo napisanie własnego skryptu.
Pokażę dzisiaj w jaki sposób stworzyć prostą klasę do generowania zrzutu bazy danych. Klasa będzie oparta na PHP5, jednak kilka drobnych zmian spowoduje, że będzie działała także pod starszą wersją. No to zaczynamy…
Tworzenie skryptu
<?php
class DbDump
{
public $drop = TRUE;
private $db;
private $sql;
private $fields = array();
public function __construct($host = FALSE, $login = FALSE, $pass = FALSE, $db = FALSE)
{
@mysql_connect($host, $login, $pass)
or die('Blad przy polaczeniu z baza danych');
@mysql_select_db($db)
or die('Blad przy wyoborze bazy danych');
mysql_query('SET NAMES utf8');
$this->db = $db;
}
Nasz skrypt zaczynamy od stworzenia kilku zmiennych, które będą używane w naszej klasie. $drop będzie odpowiedzialna za przechowywanie informacji, czy do zrzutu ma być dodawane polecenie DROP TABLE IF EXISTS. Jest to zmienna publiczna, gdyż musimy mieć na nią wpływ podczas ustawiania konfiguracji naszej kopii. Ponadto dodaliśmy jeszcze zmienne $db, $sql oraz $fields. Ich zastosowanie opiszę w dalszej części. Kolejnym elementem naszej klasy będzie stworzenie konstruktora, który będzie nam inicjował połączenie z bazą danych. Po udanym połączeniu i wybraniu bazy ustawiamy kodowanie znaków na utf-8, aby nie było problemów z polskimi znakami. Ponadto zmienna this->db będzie przetrzymywała nam nazwę bazy danych na której operujemy.
Ostatnio życie studenckie zaczyna robić się trochę nudne. Codziennie idę na uczelnie, przesiedzę tam kilka godzin i wracam do domu. Siadam na komputer, sprawdzam pocztę, czytam co nowego dzieje się w świecie. Potem włączam edytor i zaczynam kodować oraz poprawiać strony internetowe.
Nazywam się Paweł Kuna. Jestem programistą i webdeveloperem. Tworzeniem stron WWW zajmuję się od 4 lat. W ciągu tego okresu sporo się nauczyłem: zaczynałem na prostych stronach pisanych w Pajączku lub Notatniku. Potem pierwsze skrypty „Hello World” w PHP i JS. Obecnie mam na swoim koncie ogromne serwisy, odwiedzane przez kilka tysięcy osób dziennie.
Pisząc tego bloga chciałbym podzielić się w Wami moim doświadczeniem związanym ze stronami WWW. Mam nadzieję, że czytając posty każdy z Was znajdzie coś dla siebie. Chciałbym przedstawiać w nim różne zagadnienia związane z PHP, MySQL, JS, CSS oraz xHTML. Będziecie mogli przeczytać ciekawostki, sztuczki, porady dotyczące w/w technologii.
Mam nadzieję, że wielu z Was będzie tutaj stałymi gośćmi.
Pozdrawiam,
Paweł Kuna