Adatbáziskezelés pHp-ben MySQL adatbáziskezelı rendszert használva by dihunor©2009
A feladat bemutatása...................................................................................................................................1 Táblák létrehozása ......................................................................................................................................1 Táblák feltöltése..........................................................................................................................................2 Adatbáziskezelés pHp-ben .........................................................................................................................5 Csatlakozás az MySQL szerverhez (mysql_connect, mysql_close) ...................................................5 Az adatbázis kiválasztása (mysql_select_db) .......................................................................................6 SQL parancs végrehajtása (mysql_query, mysql_free_result) ............................................................7 Egy lekérdezés eredményének feldolgozása (mysql_fetch_assoc) .....................................................8
pHp, MySQL
dihunor©2009
A feladat bemutatása Egy olyan dinamikus weboldalt készítünk, amely segítségével egy telefonkönyv adatait lehet elérni és adminisztrálni. A MySQL adatbáziskezelı rendszer alat elkészítjük az adatbázist, amely az egyének adatait, lakcímét és telefonszámait tartalmazza. Ez után felépítjük PHP-ben a dinamikus weboldalt, amelyen keresztül ez elérhetı és adminisztrálható. Táblák: LAKCIM – lakcímeket tárol EGYEN – egyének személyes adatait tárolja TELEFON – telefonszámok adatait tárolja EGYEN_LAKCIM – kapcsolatot teremt az egyenek és lakcímeik között EGYEN_TELEFON – kapcsolatot teremt az egyenek és telefonszámaik között Adatbáziskezelı PHP függvények: mysql_connect – csatlakozás az adatbáziskezelı rendszerhez mysql_close – megszakítja a kapcsolatot az adatbázisskezelı rendszerrel mysql_select_db – kiválasztja az adatbázist mysql_query – elküld egy SQL parancsot az adatbáziskezelı rendszerhez mysql_fetch_assoc – az adatbáziskezelı rendszer válaszát rekordonként beteszi egy asszociatív tömbbe mysql_free_result – felszabadítja az SQL parancs eredménye által foglalt memóriát
Táblák létrehozása LAKCIM tábla létrehozása: CREATE TABLE `telefon`.`Lakcim` ( `ID` INT( 7 ) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Lakcim azonosito', `Helyseg` VARCHAR( 50 ) NOT NULL COMMENT 'Helyseg', `Utca` VARCHAR( 50 ) NULL DEFAULT NULL COMMENT 'Utca', `Szam` VARCHAR( 20 ) NULL DEFAULT NULL COMMENT 'Szam', `IranyitoSzam` INT( 6 ) NULL DEFAULT NULL COMMENT 'Postai iranyito szam' ) CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT = 'Lakcimeket nyilvantarto tabla' ENGINE = InnoDB;
EGYEN tábla létrehozása: CREATE TABLE `telefon`.`egyen` ( `ID` INT( 7 ) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Egyen azonosito', `VNev` VARCHAR( 50 ) NULL DEFAULT NULL COMMENT 'Egyen vezetekneve', `KNev` VARCHAR( 50 ) NULL DEFAULT NULL COMMENT 'Egyen keresztneve', `Nick` VARCHAR( 20 ) NULL DEFAULT NULL COMMENT 'Egyen beceneve', `SzulDat` DATE NULL DEFAULT NULL COMMENT 'Egyen szuletesi datuma' ) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT = 'Egyenek adatait nyilv''ntarto tabla';
1
pHp, MySQL
dihunor©2009
TELEFON tábla létrehozása: CREATE TABLE `telefon`.`telefon` ( `ID` INT( 7 ) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Telefonszam azonosito', `OrszagKod` VARCHAR( 4 ) NULL DEFAULT NULL COMMENT 'Orszag kod', `Prefix` VARCHAR( 4 ) NOT NULL DEFAULT '0266' COMMENT 'Prefix', `Szam` VARCHAR( 7 ) NOT NULL COMMENT 'Szam' ) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT = 'Telefonszamok nyilvantartasa';
EGYEN_LAKCIM tábla létrehozása: CREATE TABLE egyen_lakcim( egyenID int( 7 ) NOT NULL COMMENT 'Az egyen azonositoja', lakcimID int( 7 ) NOT NULL COMMENT 'Az egyen lakcimenek azonositoja', PRIMARY KEY ( egyenID, lakcimID ) , FOREIGN KEY ( egyenID ) REFERENCES egyen( ID ) , FOREIGN KEY ( lakcimID ) REFERENCES lakcim( ID ) ) CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT = 'Egyenek tarsitasa a lakcimukhoz' ENGINE = InnoDB;
EGYEN_TELEFON tábla létrehozása: CREATE TABLE egyen_telefon( egyenID int( 7 ) NOT NULL COMMENT 'Az egyen azonositoja', telefonID int( 7 ) NOT NULL COMMENT 'Az egyen telefonszamanak azonositoja', Melyik VARCHAR( 20 ) NULL DEFAULT 'Otthoni' COMMENT 'Melyik telefonszama az egyennek' , PRIMARY KEY ( egyenID, telefonID ) , FOREIGN KEY ( egyenID ) REFERENCES egyen( ID ) , FOREIGN KEY ( telefonID ) REFERENCES telefon( ID ) ) CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT = 'Egyenek tarsitasa a telefonszamukhoz' ENGINE = InnoDB;
Táblák feltöltése EGYEN tábla feltöltése: insert into egyen (ID, VNev, KNev, Nick, SzulDat) values (1, 'Demeter', 'István-Hunor', 'dihunor', '1976-11-20'), (2, 'Albert', 'Timea', default, default), (3, 'Antal', 'Szabolcs', 'Kafka', default), (4, 'Baló', 'Botond', default, default), (5, 'Bán', 'Katalin-Ágnes', 'Kata', default), (6, 'Bedı', 'Anita', default, default), (7, 'Böjthe', 'István', default, default), (8, 'Csipor-Fodor', 'Alpár', default, default), (9, 'Csiszer', 'Szabolcs', default, default), (10, 'Demeter', 'Zselyke', default, default), (11, 'Dombi', 'Balázs', default, default),
2
pHp, MySQL
(12, (13, (14, (15, (16, (17, (18, (19, (20, (21, (22, (23, (24, (25, (26, (27, (28, (29,
dihunor©2009
'Ferencz-Hanke', 'Réka', default, default), 'József', 'Hajnalka', default, default), 'Juhász', 'Tünde', default, default), 'Kiskamoni-Szalay', 'Kund', 'Szala', default), 'Kopacz', 'Kund-László', default, default), 'Kovács', 'Emıke', default, default), 'Lukács', 'Andor', default, default), 'Lukács', 'István-Paul', default, default), 'Miklós', 'Attila', default, default), 'Miklós', 'Imre', default, default), 'Olti', 'Emıke', default, default), 'Rusu', 'Andor', default, default), 'Sebestyén', 'Hunor', 'Sebi', default), 'Széll', 'Melinda', default, default), 'Varga', 'Attila', default, default), 'Varga', 'Ágota', default, default), 'Varga', 'Boglárka', default, default), 'Veress', 'Botond', default, default);
TELEFON tábla feltöltése: insert into telefon (ID, OrszagKod, Prefix, Szam) values (1, default, '0266', 314740), (2, default, '0777', 123456), (3, default, default, 654321), (4, default, '0366', 121212), (5, default, '0266', 212121), (6, default, '0777', 111111), (7, default, '0777', 222222), (8, default, '0777', 333333), (9, default, '0266', 444444), (10, default, '0266', 555555), (11, default, '0266', 666666), (12, default, '0266', 777777), (13, default, '0266', 888888), (14, default, '0266', 999999), (15, default, '0266', 909090), (16, default, '0777', 919191), (17, default, '0777', 929292), (18, default, '0777', 939393), (19, default, '0777', 949494), (20, default, '0777', 959595), (21, default, '0777', 969696), (22, default, '0777', 979797), (23, default, '0777', 989898), (24, default, '0777', 818181), (25, default, '0777', 828282), (26, default, '0777', 838383), (27, default, '0777', 848484), (28, default, '0777', 858585), (29, default, '0777', 868686), (30, default, '0777', 878787), (31, default, '0777', 888888), (32, default, '0777', 898989), (33, default, '0777', 717171),
3
pHp, MySQL
(34, (35, (36, (37, (38, (39, (40, (41, (42, (43, (44, (45,
default, default, default, default, default, default, default, default, default, default, default, default,
dihunor©2009
'0777', 727272), '0777', 737373), '0777', 747474), '0777', 757575), '0777', 767676), '0777', 777777), '0777', 787878), '0777', 797979), '0777', 707070), '0777', 000111), '0777', 111000), default, 211);
EGYEN_TELEFON tábla feltöltése: insert into `egyen_telefon` values (1, 1, default), (1, 2, 'Mobil'), (2, 3, default), (1, 4, 'Munkahely'), (3, 5, default), (3, 6, 'Mobil'), (4, 7, 'Mobil'), (5, 8, 'Mobil'), (6, 9, default), (7, 10, default), (8, 11, default), (9, 12, default), (10, 13, default), (11, 14, default), (12, 15, default), (13, 16, 'Mobil'), (14, 17, 'Mobil'), (15, 18, 'Mobil'), (16, 19, 'Mobil'), (17, 20, 'Mobil'), (18, 21, 'Mobil'), (19, 22, 'Mobil'), (20, 23, 'Mobil'), (21, 24, 'Mobil'), (22, 25, 'Mobil'), (23, 26, 'Mobil'), (24, 27, 'Mobil'), (25, 28, 'Mobil'), (26, 29, 'Mobil'), (27, 30, 'Mobil'), (28, 31, 'Mobil'), (29, 32, 'Mobil');
4
pHp, MySQL
dihunor©2009
LAKCIM tábla feltöltése: insert into lakcim (ID, Helyseg, Utca, Szam, IranyitoSzam) values (1, 'Csíkszereda', 'Kossuth Lajos', '10/7', 530221), (2, 'Senkiháza', 'Kanyargós', '1/1', default), (3, 'Csíkszereda', 'Márton Áron', '79', 530211), (4, 'Csíkpálfalva', 'Sáros', '3', default), (5, 'Csíkrákos', default, '142', default), (6, 'Gyergyóremete', default, '33', default), (7, 'Sehonna', 'Gödrös', '12/A/3', 112211), (8, 'Csíkszereda', 'Gábor Áron', '99', default), (9, 'Gyergyószentmiklós', 'Szabadság', '4/X/1', 4200);
EGYEN_LAKCIM tábla feltöltése: insert into `egyen_lakcim` values (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9);
Adatbáziskezelés pHp-ben http://php.net/ A php hivatalos oldal http://www.php.net/manual/ php kézikönyv könnyen érthetı példákkal http://www.php.net/manual/en/book.mysql.php MySQL függvények listája http://dihunor.extra.hu/hu/oktataswebdox.htm Weblap szerkesztéssel kapcsolatos dolgok http://dihunor.extra.hu/dox/webdox/php_manual_html_hu.zip php kézikönyv részleges magyar fordítása (HTML) http://dihunor.extra.hu/dox/webdox/php_manual_pdf_hu.zip php kézikönyv részleges magyar fordítása (PDF)
Csatlakozás az MySQL szerverhez (mysql_connect, mysql_close) resource mysql_connect ([ string $server = ini_get("mysql.default_host") [, string $username = ini_get("mysql.default_user") [, string $password = ini_get("mysql.default_password") [, bool $new_link = false [, int $client_flags = 0 ]]]]] ) 5
pHp, MySQL
dihunor©2009
Megnyitja a kapcsolatot egy MySQL szerverrel. Visszatérített értéke egy link a szerverhez (erıforráshoz). Sikertelen csatlakozás esetén a FALSE értéket téríti vissza. Amit meg szoktunk adni: $server a szerver neve (pl. 10.0.0.110, localhost, dihunor.extra.sql,…) $username a felhasználónév, amivel csatlakozunk a MySQL szerverhez (pl. dihunor, albert-t,…) $password jelszó bool mysql_close ([ resource $link_identifier ] ) Lezárja a kapcsolatot a MySQL szerverrel. Paramétere egy mysql_connect által visszatérített link (erıforrás) kell legyen. Példa: Nem sikerült csatlakozni a MySQL szerverhez: " . mysql_error()); print ("
A csatkalozás a(z) $server ABKR-hez sikeres!
\n Jöhet az adatbázis megnyitása és a parancsok!"); mysql_close($link); ?>
Az adatbázis kiválasztása (mysql_select_db) bool mysql_select_db ( string $database_name [, resource $link_identifier ] ) Kiválaszt egy adatbázist. Az SQL parancson ezen az adatbázison hajtódnak végre. Visszatérített értéke TRUE, ha sikerül FALSE különben. Példa: Nem sikerült csatlakozni a MySQL szerverhez: " . mysql_error()); $database = "albert-t"; $db_selected = mysql_select_db($database, $link); //vagy $db_selected = mysql_select_db($database);
6
pHp, MySQL
dihunor©2009
if (!$db_selected) die ("
Nem létezik az adatbázis vagy nincs hozzáférési jogod: " . mysql_error()); print ("
Sikerült kiválasztani a(z) $database adatbázist!
\n Jöhetnek az SQL parancsok!"); mysql_close($link); ?>
SQL parancs végrehajtása (mysql_query, mysql_free_result) resource mysql_query ( string $query [, resource $link_identifier ] ) Elküld egy SQL parancsot a MySQL szerverhez, amelyet az végrehajt. A mysql_query függvény a végrehajtott SQL parancs eredményét téríti vissza, illetve a FALSE értéket, ha nem sikerül elküldeni a parancsot. bool mysql_free_result ( resource $result ) Felszabadítja az SQL parancs eredménye által lefoglalt memóriát. Paramétere a mysql_query függvény eredménye. Példa: Nem sikerült csatlakozni a MySQL szerverhez: " . mysql_error()); $database = "albert-t"; $db_selected = mysql_select_db($database, $link); if (!$db_selected) die ("
Nem létezik az adatbázis vagy nincs hozzáférési jogod: " . mysql_error()); print ("
Sikerült megnyitni a(z) $database adatbázist!
\n"); $queryString = "SELECT * FROM egyen"; $result = mysql_query($queryString); if (!$result) die("
Hibás SQL parancs: " . mysql_error()); print ("
Sikerült végrehajtani a(z)
$queryString
lekérdezést!
\n"); mysql_free_result($result); mysql_close($link); ?>
7
pHp, MySQL
dihunor©2009
Egy lekérdezés eredményének feldolgozása (mysql_fetch_assoc) array mysql_fetch_assoc ( resource $result ) Egy asszociatív tömböt térít vissza, amelyben az indexek az adattábla mezınevei, az értékek a lekérdezés eredményeként kapott elsı rekord. Ha több rekord lesz az eredmény, akkor ciklusban hívogatjuk, amíg el nem fogynak a rekordok. Ha már nincs több rekord, akkor FALSE értéket térít vissza. Példa: Nem sikerült csatlakozni a MySQL szerverhez: " . mysql_error()); $database = "albert-t"; $db_selected = mysql_select_db($database, $link); if (!$db_selected) die ("
Nem létezik az adatbázis vagy nincs hozzáférési jogod: " . mysql_error()); print ("
Sikerült megnyitni a(z) $database adatbázist!
\n"); //Azért, hogy a magyar karakterek jól látszodjanak!!! mysql_query("SET NAMES utf8"); mysql_query("SET CHARACTER SET utf8"); mysql_query("SET COLLATION_CONNECTION = \"utf8\""); //A lekérdezés $queryString = "SELECT * FROM egyen"; $result = mysql_query($queryString); if (!$result) die("
Hibás SQL parancs: " . mysql_error()); print ("
Sikerült végrehajtani a(z)
$queryString
lekérdezést!
\n"); print ("
A lekérdezés eredménye:
\n"); $line = mysql_fetch_assoc($result); //a lekérdezés elsı sora $header = array_keys($line); //a mezık nevei print ("
\n\t\n"); for ($i = 0; $i < count($header); ++$i) print ("\t\t" . $header[$i] . " \n"); print ("\t |
\n"); for ($i = 0; $i < count($header); ++$i) print ("\t\t" . $line[$header[$i]] . " \n"); //A lekérdezés többi sorainak kilistázása while ( $line = mysql_fetch_assoc($result) ) { print ("\t |
\n");
8
pHp, MySQL
dihunor©2009
for ($i = 0; $i < count($header); ++$i) print ("\t\t" . $line[$header[$i]] . " \n"); } print (" |
"); mysql_free_result($result); mysql_close($link); ?>
9