MySQL - przykłady

Z Uniwersyteckie Centrum Informatyczne

Zakładamy, że nazwą naszej przykładowej bazy na serwerze MySQL jest 'arch', baza danych ulokowana jest na serwerze koala.uci.umk.pl oraz, że posiadamy w obrębie tej bazy jedną tabelę o nazwie 'studenci' wypełnioną w sposób następujący:

Imie Nazwisko nr_indeksu
Jan Kowalski 88276
Andrzej Nowak 88277
Katarzyna Lewandowska 88278

Czyli posiadamy tabelę 'studenci' o trzech polach: 'Imie', Nazwisko', 'nr_indeksu'. Aktualnie w tabeli znajdują się dane 3 osób.

Zobaczmy jak mogłyby wyglądać w języku PHP podstawowe operacje jakie możemy wykonywać na bazie:

Spis treści

Łączenie się z bazą SQL

Łączenie się z serwerem SQL możemy zrealizować w sposób następujący:

<?
$baza='arch'; $deskr = mysql_connect("koala.uci.umk.pl","archsqluser","***hasło***")
or die ("Nie mogę połączyć się z serwerem SQL.");
print ("Połączenie z serwerem SQL ustanowione.");

Pobieranie danych z bazy i wyświetlanie na stronie WWW

Gdy jesteśmy już połączeni z serwerem, jako aktywną ustawiamy naszą bazę 'arch' i zadajemy serwerowi zapytania SQL (queries).

$query = "SELECT * FROM studenci";
mysql_select_db($baza);
$wynik = mysql_query($query);
while ($krotka = mysql_fetch_object($wynik))
{
 print "$krotka->nr_indeksu ";
 print "$krotka->Imie ";
 print "$krotka->Nazwisko";
 print "\n";
}
mysql_close($deskr);
?>

Składając powyższe kawałki kodu w jedną całość otrzymujemy prosty program, który łaczy się z serwerem SQL, pobiera dane z tabeli 'studenci' w bazie 'arch' i wyswietla dane z tej tabeli wg kolejności pól: nr_indeksu, Imie, Nazwisko. Wynik jego wywołania powinien być zbliżony do tego:

88276 Jan Kowalski
88277 Andrzej Nowak
88278 Katarzyna Lewandowska

Wyświetlanie danych z bazy na stronie można urozmaicić stosując np. w kodzie PHP znaczniki HTML.

Przykład skryptu CGI

Innym sposobem korzystania na stronach WWW z bazy danych jest wykorzystanie skryptów CGI. Przykład skryptu CGI napisany w Perlu komunikujący się z naszą przykładową bazą 'arch' znajduje się poniżej.
Niewątpliwą zaletą używania CGI w stosunku do kodu PHP umieszczonego w stronach WWW jest możliwość ukrycia haseł dostępowych do bazy przed osobami niepowołanymi. Pomimo, że ukrywanie hasła użytkownika bazy służącego do odczytu informacji jest nam niejednokrotnie zbędne, jednak ukrycie haseł użytkowników MySQL posiadających prawa zapisu do bazy czy też modyfikowania struktury bazy jest tutaj obowiązkowa. W celu tym wystarczy nadać odpowiednie prawa dostępu skryptom CGI w katalogu domowym.

Przykład

#!/usr/local/perl5.6.0/bin/perl
use DBI;
use CGI;
$c = new CGI;
$driver = "mysql";
$database="arch";
$hostname="koala.uci.umk.pl";
$port="3306";
$user="archsqluser";
$password="***hasło***";
$dsn = "DBI:$driver:database=$database;host=$hostname;port=$port";
print $c->header ("text/html");
my $dbh = DBI->connect($dsn, $user, $password);
my $sth = $dbh->prepare("SELECT * FROM studenci");
$sth->execute();
while (my $ref = $sth->fetchrow_hashref())
 {
 print "Nazwisko = $ref->{'Nazwisko'}\n";
 }
$sth->finish();
$dbh->disconnect();

Powyższy program CGI drukuje wszystkie nazwiska studentów z tabeli 'studenci' bazy 'arch'.

Dopisywanie do bazy

Analogicznie można napisać skrypt CGI dopisujący dane do bazy. Tym razem używamy użytkownika 'archsqlupdate'. Poniższy program dopisze dane jednego studenta do tabeli 'studenci'.

#!/usr/local/perl5.6.0/bin/perl
use DBI;
$driver = "mysql";
$database="arch";
$hostname="koala.uci.umk.pl";
$port="3306";
$user="archsqlupdate";
$password="*****hasło*****";
$dsn = "DBI:$driver:database=$database;host=$hostname;port=$port";
my $dbh = DBI->connect($dsn, $user, $password);
my $sth = $dbh->prepare("INSERT INTO studenci (Imie, Nazwisko, nr_indeksu)
                          VALUES ("Elżbieta", "Szymańska", "88279")");
$sth->execute();
$sth->finish();
$dbh->disconnect();

Metodę powyższą można łatwo przystosować do ładowania większej ilości danych np. z pliku poprzez dodanie pętli wykonującej cyklicznie komendę 'INSERT' lub wykorzystując instrukcję MySQL 'LOAD DATA INFILE'. Przy czym aby skorzystać z tej ostatniej medoty należy posiadać odpowiednio przygotowany plik tekstowy z danymi do umieszczenia w bazie.