PHP - Kurs - Rozdział IX - PHP a MySQL
W tym rozdziale kursu zajmiemy się połączeniem PHP z bazą
danych MySQL. MySQL jest serwerem baz danych używających
standardowych komend dla SQL. Możesz go ściągnąć stąd. Aby stworzyć
nową bazę danych uruchamiamy serwer baz danych WinMySQLAdmin.
Przechodzimy do zakładki Databases. Klikamy na ikonkę prawym przyciskiem i wybieramy create database.
Wyświetli się okienko dialogowe pytające o unikalną nazwę
bazy danych. Po naciśnięciu przycisku create database zostanie
stworzona nowa baza danych o wybranej nazwie. Oczywiście nową
bazę można stworzyć także przy pomocy dosowego i Unixowego
edytora baz danych, mysqladmin, przy pomocy polecenia CREATE
DATABASE nazwa. Można także stworzyć bazę z pomocą PHP, ale
o tym później.
Teraz gdy już mamy bazę danych musimy stworzyć tabelę. W
niej będziemy przechowywać dane. Tabel w bazie najczęściej
jest bardzo dużo. Do stworzenia tabeli musimy włączyć
(oczywiście jeżeli używamy Windowsa) MySQLManager'a, który
znajduję się w katalogu bin. Po uruchomieniu klikamy na
którąś z ikonek (np. na MySQL), potem prawym przyciskiem na
nazwę bazy danych. Wybieramy SQL Query. Wygląda ono mniej
więcej tak:

Wpisujemy polecenie:
CREATE TABLE nazwa (
pole1 int,
pole2 varchar(40),
pole3 blob
)
Klikamy na zieloną strzałkę znajdującą się na górze
okna.
Stworzy ono tabelę o nazwie nazwa i trzech kolumnach o
nazwach: pole1, pole2 i pole3. Teraz będziemy mogli umieszczać
dane...
Aby dodać dane do tabeli należy w tym samym oknie co
tworzyliśmy tabelę wpisać polecenie:
INSERT INTO nazwa VALUES(1,'napis1','napis2')
i nacisnąć zieloną strzałkę. Aby sprawdzić czy nam się
udało należy wejść znowu na zakładkę query i wpisać:
SELECT * FROM nazwa
i kliknąć na zieloną strzałkę.
Na tym kończymy podstawy obsługi MySQL i bierzemy się za
połączenie go z PHP. Na początku każdego skryptu PHP
operującego na bazach danych musimy utworzyć połączenie z
serwerem baz danych. Używamy do tego funkcji mysql_connect(),
np.:
$pol = mysql_connect();
Posiada ona 3 parametry: nazwa hosta, nazwa użytkownika i
hasło. W przykładzie funkcja uruchomi się z parametrami o
wartościach: localhost (lokalny host), nazwa właściciela
realizowanego procesu i pusty łańcuch znaków jako hasło.
Pod koniec każdego skryptu połączenie z serwerem
powinniśmy zamknąć funkcją mysql_close($wskaznik_polaczenia),
dla przykładu:
mysql_close($pol);
Zamykamy w nim połączenie ustanowione w poprzednim
przykładzie. Potem musimy wybrać bazę danych którą chcemy
operować. Wybieramy ją funkcją mysql_select_db(), np.:
mysql_select_db("baza");
Aby wykonać polecenie SQL używamy funkcji mysql_query().
Jeżeli chcemy pokazać wszystkie elementy z tabeli musimy to
zrobić w następujący sposób:
<?PHP
$pol = mysql_connect();
mysql_select_db("baza");
$wyn = mysql_query("SELECT * FROM tabela");
while($tab = mysql_fetch_row($wyn)) {
for($i=0;$i<count($tab);$i++) echo
$tab[$i]."\n<br>";
}
mysql_close($pol);
?>
gdzie baza to nazwa bazy danych, a tabela to nazwa tabeli
którą mamy wyświetlić. Po odpowiednim sformatowaniu naszego
"wydruku" może stworzyć tabelę, która będzie
służyła jako księga gości.
Do pobierania danych z bazy służy kilka funkcji. Jednak dla
wszystkie można użyć tylko po uprzednim wykonaniu polecenia
SQL zachowanego w zmiennej, czyli w naszym przykładzie
$wyn = mysql_query("SELECT * FROM tabela");
Teraz już możemy pokazać poszczególne elementy. Robimy to
funkcjami: mysql_fetch_array(), mysql_fetch_object() i
mysql_fetch_row(). Parametrami funkcji jest zawsze zmienna
wynikowa SQL, czyli w naszym przypadku $wyn.
Pierwsza funkcja zwraca tablicę asocjacyjną, której
poszczególne elementy dostępne są pod ich SQLowymi nazwamy,
czyli gdy mamy pole TELEFON w SQL to uzyskamy do niego dostęp
przez a['TELEFON']. Funkcja zwraca wartość false jeżeli nie ma
już więcej wierszy w zbiorze wyników.
Druga funkcja zwraca obiekt o nazwach pól równych nazwom
pól SQLowych. Do przykładowego pola TELEFON uzyskamy dostęp
przez a->TELEFON. Tak jak mysql_fetch_array(), tak i ta
funkcja zwraca wartość false, gdy nie ma już więcej w zbiorze
wyników.
Trzecia funkcja zwraca tablicę o indeksach równych numerom w
kolejności poszczególnych pól (oczywiście pamiętamy o tym,
że w PHP tablice indeksowane są od 0). Czyli jeżeli TELEFON
jest piąty w kolejności to dostęp do niego uzyskamy przez
a[4].
A teraz spis wszystkich funkcji z tego rozdziału:
int mysql_affected_rows() |
zwraca ilość wierszy objętych
działaniem ostatnim zapytaniem |
int mysql_create_db(string $nazwa) |
tworzy bazę danych* |
int mysql_data_seek(int $wyniki,
$num_wiersza) |
przesuwa wewnętrzny wskaźnik wiersza |
int mysql_db_query(string $baza,
$zapytanie, int $pol) |
przesyła zapytanie do bazy danych |
int mysql_drop_db(string $baza) |
usuwa bazę danych* |
int mysql_errno() |
zwraca numer błędu wygenerowanego przy
ostatnim poleceniu |
string mysql_error() |
zwraca komunikat błędu |
object mysql_fetch_field(int $wyniki,
$index_pola) |
pobiera informacje o polu** |
array mysql_fetch_lengths(int $wyniki) |
zwraca tablicę zawierającą długości
każdego z pól ostatniego rekordu pobranego przez
funkcje mysql_fetch_array(), mysql_fetch_object() i
mysql_fetch_row() |
string mysql_field_name(int $wyniki,
$index_pola) |
zwraca nazwę pola o indeksie $index_pola |
int mysql_field_seek(int $wyniki, $index_pola) |
ustawia indeks pola |
string mysql_field_table($wyniki, $index_pola) |
określa nazwę tabeli wskazanego pola zbioru
wyników |
string mysql_field_type(int $wyniki, $index_pola) |
określa typ pola |
string mysql_field_flags(int $wyniki, $index_pola) |
zwraca flagi podanego pola*** |
int mysql_field_len(int $wyniki, $index_pola) |
zwraca długość pola |
int mysql_free_result(int $wyniki) |
zwalnia pamięć zbioru wyników |
int mysql_insert_id(void) |
określa identyfikator wygenerowany podczas
realizacji ostatniego polecenia INSERT |
int mysql_list_fields(string $baza, $tabela); |
zwraca listę pól zbioru wyników |
int mysql_list_dbs(void) |
zwraca listę baz dostępnych na serwerze MySQL |
int mysql_list_tables(string $baza) |
zwraca listę tabeli dostępnych w $bazie |
int mysql_num_fields(int $wyniki) |
zwraca ilość pól w zbiorze wyników |
int mysql_num_rows(int $wyniki) |
zwraca ilość wierszy w zbiorze wyników |
int mysql_pconnect(void) |
otwiera trwałe połączenie z serwerem MySQL |
int mysql_result(int $wyniki, $wiersz, mixed $pole) |
zwraca dane wynikowe |
string mysql_tablename(int $wyniki, $index) |
zwraca nazwę tabeli, z której pochodzi pole |
* - w tych funkcjach lepiej jest użyć poleceń SQLowych: dla
funkcji mysql_create_db() - CREATE DATABASE nazwa, dla funkcji
mysql_drop_db() - DROP DATABASE nazwa
** - spis nazw pól:
table |
nazwa tabeli |
max_length |
maksymalna długość kolumny |
not_null |
jeżeli kolumna nie może mieć wartości
NULL zwraca TRUE |
primary_key |
jeśli kolumna jest kluczem głównym
zwraca wartość TRUE |
uniqu_key |
jeśli kolumna jest kluczem, której
wartości nie mogą się powtarzać zwraca wartość TRUE |
multiple_key |
to co wyżej, gdzie wartości mogą się
powtarzać |
numeric |
jeśli kolumna przechowuje dane liczbowe
ma wartość TRUE |
blob |
jeśli przechowuje dane typu BLOB - TRUE |
type |
typ danych kolumny |
unsigned |
jeśli kolumna przechowuje dane typu
unsigned (naturalne) - TRUE |
zerofill |
jeśli pola kolumny są wypełnione
zerami - TRUE |
*** - może przyjąć wartości:
not_null |
nie może zawierać wartości null |
primary_key |
jest częścią klucza głównego |
unique_key |
jest częścią klucza, którego wartości nie mogą
się powtarzać |
multiple_key |
jest częścią klucza, którego wartości mogą się
powtarzać |
unsigned |
zawiera liczby naturalne |
zerofill |
wartość pola jest dopełniana zerami |
binary |
w polu został ustawiony atrybut binary (dane
binarne) |
|