MySQL_es_PHP

Download Report

Transcript MySQL_es_PHP

MySQL és PHP
Adatbázis-kezelés
Tarcsi Ádám ([email protected])
2011. január. 15.
Mai anyag




MySQL és a phpMyAdmin
Admin műveletek
Tárolt eljárások, triggerek
Tranzakciókezelés MySQL-ben
MySQL és a phpMyAdmin


http://ikon.inf.elte.hu/wiki/index.php?title=MySQL_t%C3%ADpusok
http://db-tanar.elte.hu/FSZ_levelezo1/Gyakorlat/MySQL_es_a_phpMyAdmin.docx
3
Gyakorlás: Albums tábla
 Létrehozás:
CREATE TABLE IF NOT EXISTS `albumok` (
`id` int(10) NOT NULL,
`nev` varchar(45) character set utf8 collate utf8_hungarian_ci NOT NULL,
`leiras` varchar(100) character set utf8 collate utf8_hungarian_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
 Feltöltés
INSERT INTO `albumok` (`id`, `nev`, `leiras`) VALUES
(1, 'Album1', 'Első album'),
(2, 'Album2', 'Második album');
4
MySQL admin műveletek – 1.
 Start server: /etc/init.d/mysql start
 Stop server: /etc/init.d/mysql stop
 Restart server: /etc/init.d/mysql restart
 Mentés (Dump):
$ mysqldump --opt -u [uname] -p[pass]
[dbname] > [backupfile.sql]
 Visszatöltés (Restore):
mysql -u [uname] -p[pass] [db_to_restore] <
[backupfile.sql]
5
MySQL admin műveletek – 2.
User létrehozás:
CREATE USER 'user1'@'localhost' IDENTIFIED BY 'pass1';
Adatbázis létrehozás:
CREATE DATABASE user1;
Jogok adása:
GRANT all privileges on user1.* to 'user1'@'localhost'
identified by 'wabp2010';
User törlés:
DROP USER 'user1'@'localhost';
Adatbázis törlés:
DROP DATABASE if exists user1;
6
Tárolt eljárások
delimiter //
CREATE PROCEDURE elsoproc(OUT param1 INT)
BEGIN
SELECT COUNT(*) INTO param1 FROM albumok;
END//
delimiter ;
CALL elsoproc(@a)
SELECT @a;
7
Trigger
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create table products (
id int not null auto_increment,
amount not null default 1,
primary key (id)
);
create table orders (
id int not null auto_increment,
product_id not null,
amount not null default 1,
primary key (id)
);
1.
2.
3.
4.
5.
6.
7.
8.
9.
DELIMITER //
CREATE TRIGGER update_product_amount BEFORE INSERT ON `orders`
FOR EACH ROW
BEGIN
UPDATE `products`
SET amount = amount - NEW.amount
WHERE id = NEW.product_id;
END;
DELIMITER ;
8
Tranzakciókezelés – 1.
$tranz= mysql_query("
BEGIN WORK;
SELECT adatok FROM test WHERE id='1' FOR UPDATE;
ROLLBACK;
UPDATE test SET adatok=adatok-1100 WHERE id='1';
COMMIT;
");
9
Tranzakciókezelés – 2.
<?php
$utaltOsszeg = 500;
//célszámla kikeresése
$e = mysql_query("SELECT id FROM bankszamlak WHERE szamlaszam = '12345678-12345678'");
$celszamla = mysql_fetch_row($e);
//az indító számla egyenlege elegendő az utaláshoz?
$e = mysql_query("SELECT id, egyenleg FROM bankszamlak WHERE szamlaszam = '8765432187654321'");
$utalo = mysql_fetch_array($e);
if($utalo['egyenleg'] >= $utaltOsszeg){
//ha elegendő az egyenleg vonjuk le belőle
//tranzakció indítása
mysql_query("START TRANSACTION");
mysql_query('UPDATE bankszamlak SET egyenleg = egyenleg-' . $utaltOsszeg . ' WHERE id =
' . $utalo['id']);
//adjuk hozzá a célszámla egyenlegéhez
mysql_query('UPDATE bankszamlak SET egyenleg = egyenleg+' . $utaltOsszeg . ' WHERE id =
' . $celszamla[0]);
//eddig minden rendben hajtsuk végre a tranzakciót
mysql_query('COMMIT');
}
?>
10
PHP és az adatbázisok
 Telepítés: AMP, kiterjesztések - egyszerű
 Speciális függvényeken/osztályokon,
(csomag kiterjesztésekkel) keresztül érjük
el.
▪ mysql:
▪ mysqli:
▪ OCI8: Oracle (ezekhez Oracle kliens is szükséges)
 Adatbázisok felderítése:
▪ phpinfo()
 Segítség:
▪ http://hu2.php.net/manual/en/book.mysqli.php
11
Tipikus adatbázis használat




Kapcsolódás
SQL utasítások futtatása (pl.: lekérdezés)
Eredmények feldolgozása
Kapcsolat bontása
12
Gyakorlat





1. "régi" mysql függvények használatával.
2. Új mysqli fügvényekkel
3. Szűrés megvalósítása
4. BIND
5. Adatbáziselérési réteg absztrakciója:
mysql.inc
BIND: SQL változóhoz kötjük a PHP
változót
 Az SQL utasítás (1) parszolása (2) után a belső
változókat feltöltjük az értékekkel (3), majd kiadjuk
a futtatás parancsát (4).
1.$sql=”insert into album (nev, leiras,
user_id) values (:nev, :leiras, :user_id)”;
2.$stmnt = OCIParse($conn, $sql);
3.OCIBindByName(, belső változó, érték, hossz
(-1 az automatikus méretmegadás));
OCIBindByName($stmnt,":nev",$nev,-1);
OCIBindByName($stmnt,":leiras",$leiras,OCIBindByName($stmnt,":user_id",$user_id,-1);
4.OCIExecute($stmnt);
14
.htaccess
egyéni hibalapok (404-es hiba)
jelszavas védelem
látogatók tiltása IP alapján
alapértelmezett fájl megváltoztatása (pl.
index.html  alma.php)
 átirányítások
 könyvtárlistázás tiltása
 adott fájlok elérésének letiltása




Példa
DirectoryIndex jelentkezes.php
<Files *.inc>
Deny from all
</Files>
Jelszavas védelem
AuthName "Protected Area"
AuthType Basic
AuthUserFile
/usr/home/www/lapodcime/vedettkonyvtar/.ht
passwd
require valid-user
.htpasswd
nev:$3$OAvE458H4vgG
Látogatók engedélyezése / tiltása
IP cím alapján
order allow,deny
allow from 123.45.6.7
allow from 012.34.5.
deny from all
Egyéb .htaccess

Átirányítás:
Redirect /regikonyvtar/
http://www.honlapodcime.hu/ujkonyvtar/
RedirectMatch 301 ^/njszt-ikon/$ /ikon.htm


Könyvtárlistázás tiltása
IndexIgnore *
IndexIgnore *.gif *.jpg
Könyvtárlistázás engedélyezése
Options +Indexes