PHP i bazy danych


PHP. Operacje na MySQL dla stron internetowych.

W poprzednich artykułach prezentowałem sposoby wykorzystania bazy MySQL. Teraz pora na praktykę. Pokażę, w jaki sposób wyciągać z lub wprowadzić do bazy danych rekordy na potrzeby dynamicznej strony WWW.

Do realizacji instrukcji wymagana jest obsługa języka PHP oraz oczywiście dostęp do bazy danych. Aby wykonać instrukcję należy najpierw połączyć się z MySQL. Zostaną wykorzystane i częściowo omówione dwie funkcje języka PHP: mysql_query() oraz mysql_fetch_array().

Struktura zapytania

Aby wykonać zapytanie należy wiedzieć, co ma zostać pobrane z bazy. Zapytanie wykonam wykorzystując jedną zmienną.

$query = "SELECT * FROM tabela";

Jest to najprostszy przykład zapytania. Możliwe jest dodanie wszelkich warunków z uwzględnieniem sortowania. Można pobrać wszystkie kolumny, lub tylko wybrane. Aby dowiedzieć się więcej na temat struktur zapytania, należy zajrzeć do poprzednich artykułów.

Właśnie tą zmienną będę się posługiwał do wykonywania wszystkich zapytań.

mysql_query()

Jest to funkcja realizująca zapytania. W zależności od rodzaju zapytania może zwracać różne wyniki. Zapytania typu INSERT, DELETE czy UPDATE nie zwracają rekordów, dlatego funkcja zwróci wartość TRUE lub FALSE.

Jeżeli natomiast zapytanie to np. SELECT - funkcja zwróci wszystkie wartości zgodne z zapytaniem lub w przypadku błędu - wartość FALSE. Warto funkcję poprzedzić znakiem @, co pozwoli na uniknięcie wyświetlania zbędnych komunikatów.

Przykład użycia funkcji:

$result = @mysql_query( $query );

Do zmiennej $result (wynik) zostaną przekazane wartości, które będzie można później wykorzystać.

Wstawianie rekordów, edycja, usuwanie itp...

Na ten temat nie będę się raczej rozpisywał. Nie ma tutaj nic wartego opisania, oprócz tego, że nie otrzymamy żadnego specjalnego wyniku w PHP. Wykonanie zapytania będzie miało wartość TRUE bądź FALSE.

Warto tutaj zabezpieczyć się instrukcją warunkową:

If( $result ){
      /* odpowiednie instrukcje */
}

mysql_fetch_array()

Jest to podstawowa funkcja, dzięki której można odczytać dane zapisane w bazie danych. Funkcja zwraca pierwszy rekord, jednak po zastosowaniu jej w odpowiedniej pętli można wyciągnąć wszystkie rekordy (lub te spełniające określony warunek). Rekordy występują tutaj w postaci tablicy.

Do funkcji przesyłamy parametr zawierający wyniki zapytania (zmienna $result). Warto przy tym wspomnieć, że możliwe jest podanie dodatkowego parametru (stała), który określa rodzaj zwracanej tablicy.

Funkcję możemy wywołać w następujący sposób:

$row = mysql_fetch_array( $result );

Realizacja powyższego spowoduje, że zmienna $row będzie tablicą zawierającą elementy (wartości kolumn) danego rekordu. Do rekordów będziemy mogli odwołać się jako $row[0] - dla pierwszej kolumny lub $row[nazwa_pierwszej_kolumny].

Opcjonalny parametr, o którym wspomniałem wyżej, określa tablicę asocjacyjną lub indeksowaną.

Stałe określające tablicę:

  • MYSQL_ASSOC - tylko $row['nazwa_kolumny']
  • MYSQL_NUM - tylko $row[n] - gdzie n to cyfra oznaczająca kolumnę (numeracja rozpoczyna się od 0).
  • MYSQL_BOTH - oba z powyższych (domyślnie).

Funkcję teraz możemy wykonać tak:

$row = mysql_fetch_array( $result, MYSQL_NUM);

Lub dla tablicy asocjactjnej, tak:

$row = mysql_fetch_array( $result, MYSQL_ASSOC);

Inne funkcje

Zamiast mysql_fetch_array() możliwe jest użycie innych funkcji w zależności od oczekiwanej postaci zwracanego rezultatu.

mysql_fetch_row() - zawraca rekordy w postaci tablicy indeksowej (MYSQL_NUM).
mysql_fetch_assoc() - zwraca rekordy w postaci tablicy asocjacyjnej (MYSQL_ASSOC).
mysql_fetch_object() - zwraca rekordy w postaci obiektów.

Operacje na bazach danych przy użyciu PHP

Teraz pokażę jak wykorzystać powyższe wiadomości przy użyciu języka PHP. Wykorzystam przykład z poprzednich artykułów. Trzeba pamiętać, że tabela musi być już utworzona w bazie danych.

Wstawianie

Wykorzystane zostaną dane z formularza, który przesyła dane metodą $_POST.

Dane te przypisano do zmiennych: $nowe_imie, $nowe_nazwisko, $nowy_email

$query = "INSERT INTO uzytkownicy VALUES ( NULL, '$nowe_imie', '$nowe_nazwisko', '$nowy_email', NOW() )";

$result = @mysql_query( $query);
if( $result ){
      echo '<p>Podane przez Ciebie informacje zostały prawidłowo zapisane - dziękujemy.</p>';
}else {
      echo '<p>Zapis informacji zakończony niepowodzeniem - skontaktuj się z administratorem serwisu</p>';
}

Zasada działania jest prosta i nie wiele można o niej powiedzieć. Po prostu - jeśli dane zostaną wprowadzone - komunikat pierwszy. W przeciwnym razie wyświetli się komunikat drugi.

Jest możliwość zlokalizowania błędu. W tym wypadku, gdy pojawi się błąd, oznacza to, że zapytanie zostało źle sformułowane. Nie należy używać komunikatu wyświetlającego błędy techniczne - chyba, że dla własnego użytku.

Wyświetlanie - pobieranie rekordów

Tutaj sprawa jest troszeczkę inna. Instrukcja może być realizowana na co najmniej dwa sposoby: wyciąganie jednego rekordu lub wyciąganie większej ilości rekordów.

Oto przykład dla jednego rekordu:

$query = "SELECT imie, nazwisko, data_dodania WHERE naziwsko='Przykładowski' LIMIT 1";
$result = @mysql_query( $query );
if( $result ){
      $row = mysql_fetch_array( $result, MYSQL_NUM );
      echo '<p><b>Imię i nazwisko: </b>' . $row[0] . ' ' . $row[1] . '<br />' . "n";
      echo '<b>Data dodania: </b> ' . $row[2] . '</p>' . "n";
}

Nieco modyfikując powyższy przykład możemy wyciągnąć kilka rekordów i wypisać je w podobny sposób:

$query = "SELECT imie, nazwisko, data_dodania WHERE imie='Bogdan' ORDER BY nazwisko ASC";
$result = @mysql_query( $query );
if( $result ){
      while( $row = mysql_fetch_array( $result, MYSQL_NUM ) ){
        echo '<p><b>Imię i nazwisko: </b>' . $row[0] . ' ' . $row[1] . '<br />' . "n";
        echo '<b>Data dodania: </b> ' . $row[2] . '</p>' . "n";
      }
}

Zamiast MYSQL_NUM można użyć MYSQL_ASSOC, tylko należy pamiętać o nazwach kolumn w elementach tablicy.

Warto wiedzieć

Kilka wskazówek, o których warto wiedzieć podczas pisania skryptów opartych o MySQL:

  • Jako parametry WHERE można podawać zmienne lub elementy tablicy. Przy tablicach należy pamiętać, aby w zmiennej $query objąć je nawiasami {}, czyli np. WHERE imie='{$row[0]}'.

  • Błedy można wyświetlać funkcją mysql_error(). Można w tym celu posłużyć się funkcją echo() lub przypisać wynik do zmiennej. W ten sposób można dowiedzieć się czy błąd powstał z przyczyn technicznych (np. nieprawidłowa nazwa tabeli lub błąd w składni zapytania). Można jej używać bezpośrednio po wykonaniu zapytania.

  • Nie zaleca się używania funkcji mysql_error() w zakresie publicznym (względy estetyki i bezpieczeństwa).

  • Jeżeli zapytania mają być zagnieżdżone to należy użyć innych nazw niż $row, np. $row2. Pomoże to uniknąć błędów logicznych.

  • Skrypty powodujące zmianę zawartości bazy danych należy skrupulatnie testować, aby zmniejszyć ryzyko błędów wprowadzonych przez użytkowników.

Znając powyższy materiał można już w pełni funkcjonalnie wykorzystać możliwości PHP połączone MySQL.

Dzięki powyższym instrukcjom i przy odrobinie pomysłowości można budować profesjonalne dynamiczne strony WWW. Nie jest to przesada, jednak podstawowe wiadomości o języku PHP muszą być przyswojone...

Dodał: Paweł​Dzedzej
Dział: PHP i bazy danych


 

ComputerSun.pl na FaceBooku
Polecamy lekturę:

Mac OS X Tiger. Skuteczne rozwiązania



X

Zapisz się na biuletyn serwisu ComputerSun.pl, aby otrzymać poradnik:

Zabezpieczanie sieci bezprzewodowych. Przydatne wskazówki jak chronić sieć domową przed intruzami

Imię:  
Email:
Tak, akceptuję Politykę Prywatności