Adatbázis-kezelés Tarcsi Ádám január. 15. MySQL és PHP
Mai anyag MySQL és a phpMyAdmin Admin műveletek Tárolt eljárások, triggerek Tranzakciókezelés MySQL-ben
MySQL és a phpMyAdmin 1/Gyakorlat/MySQL_es_a_phpMyAdmin.docx 1/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.sq l] 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 IDENTIFIED BY 'pass1'; Adatbázis létrehozás: CREATE DATABASE user1; Jogok adása: GRANT all privileges on user1.* to identified by 'wabp2010'; User törlés: DROP USER 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 7
Trigger 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 = ' '"); $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 = ' '"); $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: ▪
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
14 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);
.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 Deny from all
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 allow from deny from all
Egyéb.htaccess Átirányítás: Redirect /regikonyvtar/ 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