Ari Rantala -> Oppaat [Viimeksi muutettu 10.2.2021]

11 . LAMP-ympäristön käyttöönotto

LAMP-ympäristöllä tarkoitetaan kokonaisuutta, joka koostuu seuraavista ohjelmistoista: Linux, Apache, MySQL ja PHP. Tässä esitetään LAMP-ympäristön käyttöönottoon liittyviä asioita Ubuntu Linux  Server 16.04 LTS -järjestelmässä. Monet esitetyt asiat pätevät sellaisenaan muissakin ympäristöissä.Tavallinen LAMP-ympäristö noudattaa nk. kolmikerrosmallia oheisen kuvan mukaan:

Kolmikerrosmalli

PHP-ympäristö

  • PHP = PHP: Hypertext Preprocessor < http://www.php.net/ >, kehitetty vuodesta 1994.
  • Työväline dynaamisten Web-dokumenttien luomiseen.
  • HTML-dokumenttien sisään upotettava Web-palvelimella tulkattava ohjelmointikieli

Laajasti ymmärrettynä PHP viittaa sekä varsinaiseen PHP-kieleen että niihin teknisiin ratkaisuihin, joilla PHP-kielisten ohjelmien suorittaminen on mahdollista. Kokonaisuutena voidaan puhua PHP-ympäristöstä.

PHP-ohjelmien suorittamiseen tarvitaan

  • PHP-tulkki
  • Web-palvelinohjelmisto (lähes aina tarvitaan)
  • Usein PHP-sovellukset tarvitsevat lisäksi tietokantapalvelinta relaatiotietokannan tietojen käsittelyyn.

PHP-ohjelmia voidaan ajaa

  • käyttämällä joko maksutonta/maksullista PHP-ympäristöä palveluna (web-hotelli)
  • asentamalla PHP-ympäristö itse

PHP-ohjelmia voi suorittaa myös shell-skripteinä ilman web-palvelinta

PHP:n asentaminen Unix- ja Linux-järjestelmiin

Linux-järjestelmissä Apachen ja PHP:n asennus voidaan tehdä

  • paketinhallinnan kautta
  • kääntämällä lähdekoodeista (harvoin)

Valmiiksi käännetty versio riittää lähes aina. Riippumatta edellämainituista jakeluun liittyvistä asioista PHP-ympäristö voidaan asentaa toimintakuntoon Linux-alustalle Apache Web-palvelimen kanssa seuraavilla tavoilla:

  1. PHP toimii Apachen staattisena moduulina
    • PHP on osa ajettavaa Web-palvelinohjelmistoa
    • Tehokas: ei tarvitse käynnistää eri prosessia PHP-tulkkia varten
    • Staattiset moduulit näet komentamalla: sudo apache2 -l
    • Mahdollistaa kaikkien PHP:stä löytyvien ominaisuuksien käytön
    • Ubuntun normaalissa pakettivalikoimassa ei ole tarjolla Apachea, johon PHP olisi käännetty staattiseksi moduuliksi.
  2. PHP toimii Apachen dynaamisena moduulina (DSO = Dynamically Shared Object)
    • Toiminta pieniä poikkeuksia lukuunottamatta kuten edellisessä
    • Etuna edelliseen verattuna päivitettävyys: PHP:stä voidaan kääntää ja asentaa uusin ilmestynyt versio ilman, että varsinaista Web-palvelinta pitäisi kääntää uudelleen.
    • Mm. Ubuntun libapache2-mod-php5 -paketti.
  3. PHP toimii tavallisena CGI-ohjelmana
    • Apachen moduulina toimiessaan PHP-skriptit suoritetaan sen käyttäjän oikeuksin (sama prosessi), joka huolehtii Web-palvelimenkin ajamisesta. Yleensä tämän käyttäjän tunnus on nimeltään wwwdata (Ubuntu), wwrun, nobody tms. Tämä aiheuttaa ongelmia palvelimessa, joissa useat tavalliset käyttäjät haluavat ajaa omia PHP-sovelluksiaan. Syynä on se, että esimerkiksi datatiedostojen oikeudet pitää asettaa siten, että kaikilla muilla käyttäjillä wwwdata mukaanlukien on oltava kirjoitusoikeudet datatiedostoihin. CGI-ohjelmien käyttöä varten Apache-palvelimessa on mahdollisuus käyttää nk. suEXEC-mekanismia http://httpd.apache.org/docs/suexec.html , joka mahdollistaa CGI-ohjelmien ajamisen ohjelmatiedoston omistajan oikeuksilla.
    • On mahdollista, että Internet-palveluntarjoajasi ei tarjoa PHP:n käyttömahdollisuutta Apachen moduulina, mutta sallii CGI-ohjelmien ajamisen. Tällöin CGI-version asennus jää ainoaksi vaihtoehdoksi PHP:n käyttämiseen.
    • Kuten yleisesti CGI-ohjelmien tapauksessa, tällä tavoin suoritetut ohjelmat ovat hitaampia ja palvelinta enemmän kuormittavia, koska PHP-tulkki pitää ladata jokaisen kutsun yhteydessä. Suurimmassa osassa Web-palveluita tämä ei ole kuitenkaan ongelma.
    • Ubuntussa php5-cgi -ohjelmistopaketti

Asennustapa riippuu tarpeista ja mahdollisuuksista. Ensisijaisesti kannattaa harkita moduuliversioiden käyttämistä.

LAMP-ympäristön asentaminen

sudo apt install apache2
sudo apt install php
sudo apt install libapache2-mod-php
sudo apt install mysql-server
sudo apt install php7.0-mysql
sudo systemctl restart apache2.service
Mysql-tietokantapalvelimen asennusohjelma vaatii syöttämään tietokantapalvelimen pääkäyttäjän root salasanan asennuksen aikana. Anna testikäyttöä varten alustava salasana "sala"

New password for the MySQL "root" user:
sala
  <Ok>

Apachen perustoiminta

  • On käsitelty aiemmissa luvuissa

PHP:n perustoiminnan varmistaminen

Kun Web-palvelin on todettu asennetuksi ja toimivaksi tavallisten HTML-dokumenttien tapauksessa, on aika kokeilla yksinkertaisinta mahdollista PHP-skriptiä. Kopioidaan tai luodaan  "Hello, World!"-skripti hello.php

<html>
<head>
    <title>Ensimmäinen PHP-skripti</title>
</head>
<body>
<!-- hello.php -->
<?php
    echo "Hello, World!";
?>
</body>
</html>


hakemistoon /var/www/html ja kutsutaan sitä Web-selaimella osoitteella http://localhost/hello.php

Varsinainen PHP-skripti tarvitsee ainostaan lukuoikeudet web-palvelimen teholliselle käyttäjälle (www-data). Yleensä tämä tarkoittaa lukuoikeuksien antamista kaikille muille:

<root> /var/www/ # ls -la hello.php
-rw-r--r-- 1 root root 118 Sep 18 11:15 hello.php

Lukuoikeudet voidaan lisätä tarvittaessa:

    chmod o+r /var/www/hello.php

Ubuntu Linuxin asennuksen yhteydessä asennettu PHP (libapache2-mod-php5) asentuu Apachen dynaamisena moduulina. Tämän näkee esimerkiksi käynnistämällä Web-palvelimen httpd-binäärin optiolla -l, jonka "Compiled-in modules"-listauksessa näkyvät vain staattiset moduulit. Moduuli mod_so (Module Shared Objects) mahdollistaa dynaamisten moduulien käytön. Which-komennolla voidaan aluksi tarkistaa, missä järjestelmän apache2-binääri sijaitsee:

which apache2
/usr/sbin/apache2

sudo apache2 -l
Compiled in modules:
core.c
mod_so.c
mod_watchdog.c
http_core.c
mod_log_config.c
mod_logio.c
mod_version.c
mod_unixd.
Asetustiedostoista sitten nähdään, että php7.module ladataan dynaamisesti:
more /etc/apache2/mods-enabled/php7.0.load 
# Conflicts: php5
LoadModule php7_module /usr/lib/apache2/modules/libphp7.0.so

PHP:n salliminen käyttäjien public_html-kansioista

Kommentoi tiedostosta /etc/apache2/mods-enabled/php7.0.conf rivi

php_admin_value engine off

PHP-ympäristön asetukset - php.ini

Skriptissä phpinfo.php käytetyllä phpinfo()-funktiolla näet käyttämääsi PHP-ympäristöösi liittyviä tietoja. Oleellisimpia tietoja ovat mm. käyttämäsi PHP:n versio ja käytettävissä olevat aliohjelmakirjastot.

<?php
phpinfo();
?>

Suoritetun asennuksen seurauksena ohjelman pitäisi tulostaa Web-selaimeen mm. PHP:n versioksi ”PHP Version 7.0.22-0ubuntu0.16.04.1”.

Huomaa lisäksi erityisesti PHP-ympäristön keskeisimmän asetustiedoston sijainti /etc/php/7.0/apache2/php.ini. Tehtyjen muutosten aktivointi tapahtuu käynnistämällä Web-palvelin uudelleen.

PHP:n virheilmoitukset näkyviin

PHP:n virheilmoitukset ovat kytketty oletusarvoisesti pois päältä. Testiympäristössä virheilmoitusten näyttäminen on usein tarpeellista. Virheilmoitusten näyttäminen kytketään päälle php.ini-tiedoston asetuksilla

display_errors = On
...
display_startup_errors = On

Esimerkeissä oletetaan, että php.ini-tiedostossa on käytetty ohessa esitettyjä asetuksia

MySQL-tietokantapalvelimen käyttö

MySQL:n käynnistäminen ja toiminnan varmistus

MySQL-tietokantapalvelinta voidaan hallita samoin kuin Apache Web-palvelinta. Tarvittavat komentoriviltä annettavat komennot ovat seuraavat:
sudo systemctl start mysql
sudo systemctl stop mysql
sudo systemctl restart mysql
MySQL kuuntelee tcp-porttia 3306. netstat-komennolla voidaan tutkia, onko MySQL käynnissä:
netstat -an | grep :3306
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN

Yhteydenotto tietokantapalvelimeen

MySQL-tietokantapalvelimen mukana tulee mysql-monitori, joka on asiakasohjelma tietokannan käyttöä varten. Yhteys tietokantapalvelimeen otetaan kirjoittamalla:
mysql -u root -p
Enter password: sala
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.21-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql>
mysql-komentokehotteeseen mysql> voidaan sitten kirjoittaa kaikkia tietokantapalvelimelle välitettäviä komentoja. Yhteys suljetaan exit-komennolla:

mysql> exit
Bye
>
Muodostettaessa yhteyttä voidaan myös määritellä tietokanta, jota halutaan käyttää. Otetaan yhteys esim. osoitteet-nimiseen tietokantaan:
mysql -u root -p osoitteet
Halutessa voidaan antaa myös salasana:

mysql -u root --password=sala osoitteet
mysql -u root -psala osoitteet

Salasanaa ei kannata syöttää yhteydenmuodostusvaiheessa sellaisissa ympäristöissä, joissa joku voi nähdä sen esimerkiksi tutkimalla järjestelmän prosessilistaa.

MySQL:n pääkäyttäjän salasanan asettaminen

MySQL-tietokantapalvelimen pääkäyttäjän tunnus on root. Tunnus sattuu sisältämään juuri samat kirjaimet samassa järjestyksessä kuin Linux-palvelimen pääkäyttäjän tunnus. Mitään muuta yhteistä ao. tunnuksilla ei ole. MySQL:n asennuksen jälkeen tietokantapalvelimen pääkäyttäjän salasana on sala, jos toimittiin edellä annetun ohjeen mukaan. Salasana voidaan muuttaa tarvittaessa mm. seuraavalla tavalla
/usr/bin/mysqladmin -u root -psala password 'uusi-salasana'
Varoituksista huolimatta salasana vaihdetaan. Lue tarvittaessa asiasta lisää: https://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html

MySQL-käyttäjät

Tietokantapalvelinta voi käyttää vain voimassa olevilla käyttäjätunnuksilla. Nämä käyttäjätunnukset eivät ole samoja kuin Linux-järjestelmän käyttäjätunnukset. Tietokantapalvelimen pääkäyttäjä on siis käyttäjätunnus root. Asennuksen jälkeen ainoastaan pääkäyttäjällä on oikeus luoda ja poistaa tietokantoja ja niiden käyttäjiä sekä määritellä eri tietokantojen käyttäjille käyttöoikeuksia.

MySQL-käyttäjät ovat oikeuksineen tallennettuna mysql-nimisen tietokannan user-taulussa:

mysql> SELECT * FROM mysql.user;
...
...
Näkee kaikki kentät, paljon informaatiota
...


mysql> SELECT user,host,authentication_string FROM mysql.user;
+------------------+-----------+-------------------------------------------+
| user | host | authentication_string |
+------------------+-----------+-------------------------------------------+
| root | localhost | *D36F00B81C7E8087ADABF47F2FBC71E7F7B30561 |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| debian-sys-maint | localhost | *08C9ED931856151A34B1A9ABD8BB5AD9C8B3DD31 |
+------------------+-----------+-------------------------------------------+
4 rows in set (0.00 sec

MySQL-pääkäyttäjien luominen

Uusia käyttäjiä voi luoda (ja valtuuksia muuttaa) vain sellaiset käyttäjät, jotka ovat luotu "WITH GRANT OPTION" eli esim. seuraavalla tavalla:
mysql -u root -p
Enter password:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'tkuser'@'localhost' IDENTIFIED BY 'sala' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
mysql> exit
Komentosarjan jälkeen MySQL-käyttäjä tkuser on myös oikeutettu luomaan tietokantoja ja muita käyttäjiä.
Muista AINA oikeuksien muuutosten jälkeen: FLUSH PRIVILEGES;

Pitkät moniriviset mysql-monitorille annettavat komennot (mm. SQL-kyselyt) voidaan kirjoittaa ja halutessa tallentaa millä tahansa tekstieditorilla ja kopioida mysql-ohjelmaan esim. leikepöydän kautta. Tekstitiedostoon tallennetut komennot voidaan syöttää myös suoraan komentomalla
mysql -u root -p < pitka-sql-komento.txt

MySQL-käyttäjien lisääminen : 3 tapaa

 http://www.databasef1.com/tutorial/mysql-create-user.html

1) CREATE USER

CREATE USER user [IDENTIFIED BY [PASSWORD] 'password']

esim:
CREATE USER 'user1'@'localhost' IDENTIFIED BY 'pass1';
Edellisen komennon seurauksena kaikki oikeudet N, jotta ao. käyttäjä voisi tehdäkin jotakin laitetaan esim:
GRANT SELECT,INSERT,UPDATE,DELETE ON *.* TO 'user1'@'localhost';

Tai kaikki esim. oikeudet:
GRANT ALL ON *.* TO 'user1'@'localhost';

2) GRANT

Käyttäjä voidaan lisätä myös suoraan GRANT-lauseella esim.
GRANT ALL ON *.* TO 'user2'@'localhost' IDENTIFIED BY 'pass1';

Käyttäjän poistaminen

drop user user66;

MySQL-salasanan muuttaminen

A) Kirjaudu halumallasi MySQL-tunnuksella
B)
set password = password("yournewpassword");

MySQL-käyttöpaikat

MySQL-käyttäjätunnus on oikeastaan käyttäjätunnuksen (user) ja käyttöpaikan (host) yhdistelmä. Käyttäjän oikeudet määräytyy sen mukaan, millä käyttäjätunnuksella on kirjauduttu ja mistä käyttöpaikasta (host). Luodaan pari käyttäjää etäkäyttöoikeuksin:
GRANT ALL PRIVILEGES ON *.* TO 'remoroot'@'%' IDENTIFIED BY 'sala' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON *.* TO 'iproot'@'192.168.1.191' IDENTIFIED BY 'sala' WITH GRANT OPTION;
Nämä luodut käyttäjät voidaan nyt nähdä listauksessa muiden mukana:
mysql> SELECT user,host,password FROM mysql.user;
+------------------+---------------+-------------------------------------------+
| user | host | authentication_string |
+------------------+---------------+-------------------------------------------+
| root | localhost | *D36F00B81C7E8087ADABF47F2FBC71E7F7B30561 |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| debian-sys-maint | localhost | *08C9ED931856151A34B1A9ABD8BB5AD9C8B3DD31 |
| tkuser | localhost | *D36F00B81C7E8087ADABF47F2FBC71E7F7B30561 |
| user1 | localhost | *D36F00B81C7E8087ADABF47F2FBC71E7F7B30561 |
| user2 | localhost | *22A99BA288DB55E8E230679259740873101CD636 |
| remoroot | % | *D36F00B81C7E8087ADABF47F2FBC71E7F7B30561 |
| iproot | 192.168.1.191 | *D36F00B81C7E8087ADABF47F2FBC71E7F7B30561 |
+------------------+---------------+-------------------------------------------+
9 rows in set (0.00 sec)
%-merkki host-sarakkeessa tarkoittaa mitä tahansa käyttöpaikkaa.

Tietokannan luominen

Tietokannan luomiseen tarvitaaan erityiset oikeudet. Aiemmin luodulla tkuser-käyttäjällä on tällaiset oikeudet. Uusi tietokanta nimeltä osoitteet luodaan komennolla create database seuraavasti:

mysql> create database osoitteet;

Tietokannan poistaminen

Tietokannan voi tuhota haluttaessa drop database -komennolla. Esimerkiksi

mysql> drop database osoitteet;

Huom: Jätä osoitteet-tietokanta jatkoa varten.

Tietokantojen listaaminen


Tarjolla olevat tietokannat voi listata show databases -komennolla:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| osoitteet |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.01 sec)

Tietokannan valinta

Jos luotua tietokantaa ei määritettä muodostettaessa yhteyttä (mysql -u root -p osoitteet), se on määritettävä yhteydenmuodostuksen jälkeen use-komennolla:
mysql> use osoitteet;
Database changed

Tietokannan taulun luominen

Tietokannan taulu luodaan create table -komennolla. Luodaan henkilot-niminen taulu:
CREATE TABLE henkilot ( -- 1.sql
tunnus varchar(6) not null,
sukunimi varchar(128) not null,
etunimi varchar(128) not null,
osoite varchar(255) not null,
puhnro varchar(64) not null,
email varchar(128),
PRIMARY KEY (tunnus),
UNIQUE (email)
);

Kysely koostuu seuraavista asioista:

  • CREATE TABLE henkilot - Luodaan uusi taulu
  • -- 1.sql – Kaksi miinusmerkkiä tarkoittavat, että loppurivi on kommenttia. Kommenttina 1.sql, joka voisi olla vinkkinä siitä, että kysely on tallennettuna esim. 1.sql-nimiseen tiedostoon.
  • tunnus varchar(6) - Vaihtuvamittainen merkkijono (variable characters = varchar) korkeintaan 6 merkkiä pitkä.
  • not null - tunnus on pakollinen jokaisella rivillä (tietueessa)
  • PRIMARY KEY (tunnus) - Määrittelee pääavaimen. Taulussa ei sallita kahta samanlaista tunnus-arvoa. Pääavain on pakollinen automaattisesti (ilman määrittelyä: not null).
  • UNIQUE (email) - Taulussa ei sallita kahta samanlaista email-arvoa. Useita "null"-arvoja sallittaan.

Mainittu CREATE TABLE -komento kaikkine riveineen voidaan suorittaa kaikilla aiemmin mainituilla tavoilla, kun osoitteet-tietokanta on valittuna (use):

  • Kirjoittamalla se rivi riviltä mysql-monitoriin
  • Kirjoittamalla se halutulla editorilla etukäteen ja kopioimalla leikepöydän kautta mysql-monitoriin
  • Kirjoittamalla ja tallentamalla se halutulla editorilla etukäteen ja antamalla ao. tiedosto syötteenä mysql-monitorille: mysql -u tkuser -p < 1.sql
 
Käytettäesä esim. kahta ensimmäistä tapaa:
mysql> CREATE TABLE henkilot ( -- 1.sql
-> tunnus varchar(6) not null,
-> sukunimi varchar(128) not null,
-> etunimi varchar(128) not null,
-> osoite varchar(255) not null,
-> puhnro varchar(64) not null,
-> email varchar(128),
-> PRIMARY KEY (tunnus),
-> UNIQUE (email)
-> );
Query OK, 0 rows affected (0,01 sec)

Taulujen ja niiden rakenteiden listaaminen

Tietokannan taulut voi listata show tables -komennolla:
mysql> show tables;
+---------------------+
| Tables_in_osoitteet |
+---------------------+
| henkilot |
+---------------------+
1 row in set (0,00 sec)
Tietokannan taulun rakenteen voi listata esim. describe- tai desc-komennoilla:
mysql> desc henkilot;
+----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| tunnus | varchar(6) | NO | PRI | NULL | |
| sukunimi | varchar(128) | NO | | NULL | |
| etunimi | varchar(128) | NO | | NULL | |
| osoite | varchar(255) | NO | | NULL | |
| puhnro | varchar(64) | NO | | NULL | |
| email | varchar(128) | YES | UNI | NULL | |
+----------+--------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

Tietojen lisääminen tauluun

Tietojen lisääminen tietokannan tauluun tapahtuu INSERT INTO -lauseella. Esimerkiksi:

INSERT INTO henkilot (
tunnus,
sukunimi,
etunimi,
osoite,
puhnro,
email
)
VALUES (
'havpen',
'Haverinen',
'Pentti',
'Poritie 4',
'00001',
'pena@server.fi'
);
Kysely koostuu seuraavista asioista:
  • INSERT INTO -käsky lisää tietueen tietokannan tauluun
  • Vaikka kenttien nimet voidaan jättää poiskin, ne kannattaa yleensä määritellä, jotta lisäys onnistuisi samalla lauseella vaikka tauluun myöhemmin lisätään kenttiä.
  • Huomaa char- ja varchar-tyyppien kohdalla: Lisättävä data on heittomerkeissä. Kokonais- ja reaaliluvut määriteltäisiin ilman heittomerkkejä.

Voit lisätä tietokantaan haluamiasi tietueita. Esimerkeissä tietokantaan on lisätty tietueet seuraavan tiedoston 2.sql  mukaisesti:
-- 2.sql
INSERT INTO henkilot (
tunnus, sukunimi, etunimi, osoite, puhnro, email
)
VALUES (
'havpen', 'Haverinen', 'Pentti', 'Poritie 4', '00001','pena@server.fi'
);

INSERT INTO henkilot (
tunnus, sukunimi,etunimi,osoite, puhnro,email
)
VALUES (
'kanvis','Kanninen','Visa','Kumpiuja 2','11234','kane@abcde.fi'
);

INSERT INTO henkilot (
tunnus, sukunimi,etunimi,osoite, puhnro,email
)
VALUES (
'polrau','Polkunen','Rauno','Umpikuja 1','01234','rane@abcde.fi'
);

INSERT INTO henkilot (
tunnus, sukunimi,etunimi,osoite, puhnro,email
)
VALUES (
'renkar','Rentola','Kari','Asemakatu1','22234','carra@gwassa.fi'
);

INSERT INTO henkilot (
tunnus, sukunimi,etunimi,osoite, puhnro,email
)
VALUES (
'renjar','Rentola','Jari','Asemakatu1','33334','jarra@gwassa.fi'
);

INSERT INTO henkilot (
tunnus, sukunimi,etunimi,osoite, puhnro,email
)
VALUES (
'puuatt','Puulonen','Atte','Ratakatu1','44444', NULL
);

INSERT INTO henkilot (
tunnus, sukunimi,etunimi,osoite, puhnro,email
)
VALUES (
'puuhel','Puulonen','Heli','Asematie 7','55555','hellu@abcd.fi'
);

Kyselyjen suorittaminen

SQL-kielen laajin osa-alue sisältää erilaiset SQL-kyselyt, joilla haetaan ja muokataan relaatiotietokannassa olevaa tietoa. Hakujen tuloksena on joukko rivejä, joilla on sama rakenne.Tässä annetaan esimerkein jonkinlainen kosketus siihen, mitä SQL:llä voidaan tehdä. Voit suorittaa kyselyt haluamallasi tavalla (kirjoitus, leikepöytä, syöttö tiedostosta).

Kaikkien rivien hakeminen

Tietokannan henkilot-nimiseseen tauluun tallennetut kaikki tietueet ja niiden sarakkeet voidaan listata SELECT-lauseella. Kyselyn

SELECT * FROM henkilot; --3.sql
tuloksena on kaikki taulun rivit kaikkine (*) sarakkeineen. Jos tulostuvia sarakkeita halutaan rajoittaa, ne on lueteltava kyselyn yhteydessä:

mysql> SELECT sukunimi, etunimi, email FROM henkilot; -- 4.sql
+--------+-----------+---------+------------+--------+-----------------+
| tunnus | sukunimi | etunimi | osoite | puhnro | email |
+--------+-----------+---------+------------+--------+-----------------+
| havpen | Haverinen | Pentti | Poritie 4 | 00001 | pena@server.fi |
| kanvis | Kanninen | Visa | Kumpiuja 2 | 11234 | kane@abcde.fi |
| polrau | Polkunen | Rauno | Umpikuja 1 | 01234 | rane@abcde.fi |
| puuatt | Puulonen | Atte | Ratakatu1 | 44444 | NULL |
| puuhel | Puulonen | Heli | Asematie 7 | 55555 | hellu@abcd.fi |
| renjar | Rentola | Jari | Asemakatu1 | 33334 | jarra@gwassa.fi |
| renkar | Rentola | Kari | Asemakatu1 | 22234 | carra@gwassa.fi |
+--------+-----------+---------+------------+--------+-----------------+
7 rows in set (0.01 sec

MySQL:n ja PHP:n yhteistoiminnan testaus

Tee PHP-ohjelma

<?php
$db = new PDO('mysql:host=localhost;dbname=osoitteet;charset=utf8',
'tkuser', 'sala');

$stmt = $db->query('SELECT * FROM henkilot');

while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo "{$row['sukunimi']}, {$row['etunimi']}<br>\n";
}
?>
ja tallenna tiedosto esim. nimellä: /var/www/html/mysql-testi.php Kun suoritat skriptin osoitteesta http://localhost/mysql-testi.php, selaimeen pitäisi tulostua allekkaisille riveille tunnukset:

Haverinen, Pentti
Kanninen, Visa
Polkunen, Rauno
Puulonen, Atte
Puulonen, Heli
Rentola, Jari
Rentola, Kari


PhpMyAdmin

MySQL-tietokantapalvelinta voi käyttää useilla erilaisilla asiakasohjelmilla. Asennusesimerkeissä on käytetty merkkipohjaista mysql-ohjelmaa. PhpMyAdmin on eräs MySQL-tietokannan asiakasohjelmista. PhpMyAdmin on toteutettu PHP:llä ja se asennetaan Web-palvelimelle kuten mikä tahansa PHP-ohjelma.

PHP-pohjaisena phpMyAdmin-ohjelmaa käytetään Web-selaimella ja sitä voi käyttää verkon välityksellä käyttöpaikasta ja käyttöjärjestelmästä riippumatta. PhpMyAdminilla voidaan suorittaa normaalien SQL-kyselyjen lisäksi monia tietokannan ylläpitotoimia. Sillä voidaan mm. luoda tietokantoja tauluineen ja määritellä esim. käyttäjäoikeuksia.

Tässä esitetään PhpMyAdmin-ohjelman minimiasennus. Esimerkiksi olennaisia tietoturvaan liittyviä lisäasetuksia ei tässä käsitellä.

Asennus Linux-järjestelmään

PhpMyAdmin vaatii toimiakseen seuraavat ohjelmistot
  • Web-palvelin
  • PHP-tulkki
  • MySQL-tietokantapalvelin

Vaadittu ympäristö on asennettu aiemmissa tämän dokumentin jaksoissa. phpMyAdmin-ohjelman voi asentaa seuraavasti:
sudo apt install phpmyadmin

...
Web server to reconfigure automatically:

[X] apache2
[ ] lighttpd
...
Please provide a password for phpmyadmin to register with the database server.
If left blank, a random password will be generated.

MySQL application password for phpmyadmin:
sala

Asentunut phpmyadmin

  • Asentuneen phpmyadmin-ohjelman pääasetukset ovat tiedostossa
more /etc/apache2/conf-enabled/phpmyadmin.conf 
...
Alias /phpmyadmin /usr/share/phpmyadmin
...
joista keskeisin on yo. Alias-direktiivi. Täten phpmyadmin-ohjelman käyttöliittymä löytyy osoitteesta http://localhost/phpmyadmin/ ja voit kirjautua käyttämään tietokantapalvelinta ja sen tietokantoja esim. tkuser-tunnuksella ja sala-salasanalla. Em. tiedostosta näkee monia muita keskeisiä asetuksia.

  • Lisäksi huomataan, että varsinainen ohjelma on asentunut /usr/share/phpmyadmin-kansioon. Tarvittaessa voit selailla ao. kansion tiedostoja.


Kun asennus on suoritettu, selaimeen kirjoitetaan siis osoitteeksi http://localhost/phpmyadmin/ ja kirjaudutaan haluttuna mysql-käyttäjänä esim. tkuser-käyttäjänä. Tietokannat-alasvetovalikosta voidaan valita osoitteet-tietokanta, jonka henkilot-taulun Selaa-kuvaketta napsauttamalla nähdään tauluun tallennetut rivit.

Linkkejä


Jätetty tarkoituksella tyhjäksi.