570 likes | 725 Views
6. előadás: PHP-MySQL Barabás Péter. WEB TECHNOLÓGIÁK. Tartalom. MySQL áttekintés PHP MySQL függvények Példák. MySQL – Parancssori kliens. MySQL documentáció {MYSQL_INSTALL_DIR} docs manual _ toc.html Telepítési instrukciók WAMP, XAMPP részeként MySQL önállóan
E N D
6. előadás: PHP-MySQL Barabás Péter WEB TECHNOLÓGIÁK
Tartalom • MySQL áttekintés • PHP MySQL függvények • Példák
MySQL – Parancssori kliens • MySQLdocumentáció • {MYSQL_INSTALL_DIR}\docs\manual_toc.html • Telepítési instrukciók • WAMP, XAMPP részeként • MySQL önállóan • Csatlakozás parancssorból • mysql [OPTIONS] [DB] • mysql –u <usernév> –p <dbnév> • SQL script futtatás • mysql –u <usernév> -p < script.sql • GUI client • MysqlControl Center • PhpMyAdmin
Adattábla létrehozás • Web_db adatbázis létrehozása: • CREATE DATABASE web_db; • Notes nevű tábla létrehozása: • USE web_db; • CREATE TABLE notes (…); • Teszt adatok beszúrása • Érdemes script fájlban megírni majd futtatni az előbb említett módokon
Alap utasítások(emlékeztető) • CREATE • Adatbázisok és táblák (egyéb objektumok) létrehozása • SELECT • Táblaadatok lekérdezése adott feltételre illeszkedően • DELETE • Egy vagy több sor törlése a táblából • INSERT • Új sor (vagy sorok) beszúrása a táblába • UPDATE • Rekord módosítás • ALTER • Tábla (egyéb db objektum) szerkezet módosítása
PHP-MySQL függvények • Kapcsolódás adatbázishoz • Lekérdezés • Eredmények kezelése • Erőforrások felszabadítása • Kapcsolat bezárás
Kapcsolódás adatbázishoz • mysql_connect(server, username, password) • Kapcsolódás a MySQL szerverhez egy adott porton • Alapértelmezetten:„localhost:3306” • Username és passwordsztring típusúak • Visszatérési értékFALSE hiba esetén • Példa • $db_link = mysql_connect("localhost:3306","test", "123"); • Létezik perzisztens kapcsolat:mysql_pconnect
Adatbázis kiválasztása • mysql_select_db(name, link) • Name: adatbázis neve (sztring) • Link:opcionális, egy nyitott kapcsolat referenciát vár, amit a connect visszaad • Amennyiben a link nincs megadva, az utolsó nyitott kapcsolatot használja • Visszatési érték: TRUE sikeresség esetén, egyébként FALSE • Példa • mysql_select_db("web_db");
Hibakezelés – I. • mysql_error(link) • Hibaüzenettel vagy hibakóddal tér vissza • Link opcionális • Az utolsó nyitott kapcsolatot használja, amennyiben a link nincs megadva • Ha nincs hiba, akkor üres stringgel tér vissza • Példa • mysql_error();
Hibakezelés – II. • mysql_no(link) • A hiba kódjával tér vissza • Link opcionális • Az utolsó nyitott kapcsolatot használja, amennyiben a link nincs megadva • Ha nincs hiba, a visszatérési érték 0 • Példa • mysql_no();
Utasítások készítése – I. • mysql_query(query, link) • select lekérdezést készítése • A querya lekérdezés szövege • Ne tartalmazzon a query záró pontosvesszőt • A visszatérési értéke egy erőforrás azonosító, vagy FALSE, amennyiben a lekérdezés • Hibás • SHOW vagy DESCRIBE • Példa (a books tábla összes sorának lekérdezése) • $query = "SELECT * FROM books"; • $result = mysql_query($query);
Utasítások készítése – II. • INSERT and UPDATE utasítások • erőforrás • Visszatérési érték: • TRUE sikeresség esetén • FALSE hiba esetén • Példa (a könyv tábla szerkezeti leírása) • $query = "DESCRIBE books"; • $status = mysql_query($query);
Metadatok kezelése • mysql_list_fields(database, table, link) • Metadatokat szolgáltat az adott adatbázis adott táblájáról • A visszatérési érték tartalmazza a tábla metaadatait (oszlopnevek, típusok) • Példa • $fields = mysql_list_fields("web_db", "books");
Tábla mezőinek darabszáma • mysql_num_fields(result) • A tábla mezőinek darabszámát adja vissza • A result paraméter egy erőforrás referencia, amit a mysql_list_fields függvény ad vissza • Példa • $fields = mysql_list_fields("web_db", "books"); • $num_columns = mysql_num_fields($fields);
Tábla mezőinek neve • mysql_field_name(result, index) • A tábla index-edik mezőjének nevével tér vissza (index: 0,1,…) • A result paraméter egy erőforrás referencia, amit a mysql_list_fields függvény ad vissza • Példa: az első mező neve • $fields = mysql_list_fields("web_db", "books"); • $isbn = mysql_field_name($fields, 0);
Adatsorok kezelése – I. • mysql_fetch_row(result) • Minden hívása egy indexelt tömb következő sorával tér vissza • A result paraméter egy erőforrás referencia, amit a mysql_query függvény ad vissza • A visszatérési érték FALSE, ha már nincs több sor • Példa • $query = "SELECT * FROM books"; • $result = mysql_query($query); • $row = mysql_fetch_row($result); // row 0 • $isbn = $row[0]; // isbn for row 0
Adatsorok kezelése – II. • mysql_fetch_assoc(result) • Működése hasonló amysql_fetch_rowműködéséhez, de a következő sorra egy asszociatív tömbként hivatkozhatunk • Példa • $query = "SELECT * FROM books"; • $result = mysql_query($query); • $row = mysql_fetch_assoc($result); // row 0 • $isbn = $row['isbn']; // isbn for row 0
Adatsorok kezelése – III. • mysql_fetch_array(result) • A mysql_fetch_row, mysql_fetch_assoc kombinációja • A következő sorra asszociatív és indexelt tömbként is lehet hivatkozni • Példa • $query = "SELECT * FROM books"; • $result= mysql_query($query); • $row = mysql_fetch_array($result); // row 0 • $isbnA = $row[0]; // isbn for row 0 • $isbnB = $row['isbn']; // can also get it this way
Adatsorok kezelése – IV. • mysql_num_rows(result) • Egy lekérdezés eredményrekordjainak számát adja vissza • Result a mysql_query által visszaadott erőforrás • mysql_affected_rows(result) • INSERT, UPDATE, or DELETE utasítások után használatosak • Visszatér az érintett rekordok számával • result paraméter a mysql_query visszatérési értéke
Egyéb függvények • mysql_real_escape_string(string,link) • Visszatér egy átalakított sztinggel, amit biztonságosan használhatunk amysql_query-ben • MySQL 4.1-től használhatóak amysqli_... Függvények • Több lehetőség, • Új funkcionalitások • OO interface • Tárolt eljárások támogatása • Tranzakciókezelés • Fejlettebb debugolási lehetőségek
Erőforrások felszabadítása • mysql_free_result(result) • Egy adott erőforrás által lefoglalt memória felszabadítása • Result: erőforrás referencia • Hívása nem szükséges, kivéve nagy eredményhalmazok esetén • Automatikusan lefut, amikor a script futása véget ér • mysql_close(link) • Bezárja az adatbázis kapcsolatot • Perzisztens kapcsolatokra nincs hatással
Db_connect függvény • Scriptekben használatos • Érdemes egy db_connect.php nevű file-ba írni és includálni
Books adatbázis példa – I. Books.sql
Books adatbázis példa – II. Books.sql
Books adatbázis példa – III. • books.sql futtatása parancssorban • mysql-uxxxxx-p < c:/.../books.sql • Lehet phpMyAdmin-ban is • Következő lépés: • Dbase.php írása • A könvyadatokat megjeleníti HTML táblázatban
Dbase.php – I. • HTML headerinfo
Dbase.php – II. • Kapcsolódás • $db_link = db_connect("web_db"); • Ez a függvény a db_connect.phpinclude file-ban van • Az include path aphp.ini-bendefiniált • include_path=".;c:\Apache\phpincludes"
Dbase.php – III. • Lekérdezzük az összes rekordot az összes mezővel • $query = "SELECT * FROM books"; • $result = mysql_query($query) or die("SQL Query failed"); • Tábla tulajdonságok lekérdezése • $fields = mysql_list_fields("web_db", "books"); • $num_columns = mysql_num_fields($fields)
Dbase.php – IV. • A mezőfejléceket a HTML táblázat fejlécébe írjuk ki
Dbase.php – V. • A könyv adatokat egy HTML táblázatként írjuk ki
Dbase-php – VI. • Szabadítsuk fel az erőforrásokat és zárjuk be a kapcsolatot • mysql_free_result($result); • mysql_close($db_link); • ?> • </body> • </html>
Script hívása gomb kattintásra – I. • Adjunk nevet és értéket a nyomógombnak • <input type="submit" name="choice" value="Display"> • Ha a formsubmitálódik, akkor a név index létező lesz • if (isset($_REQUEST['choice']) • { // process the button click here • } • ... • Több submit gomb esetén a neveknek és értékeknek különbözniük kell
Script hívása gomb kattintásra – II. • Másik előnye a submit gomb label-jének (értékének) használatának, hogy meg tudunk különböztetni választási lehetőségeket • Több submit gombnak lehet ugyanaz a neve, de az értékekben különbözniük kell
Script hívása linkben • Egy link alkalmas lehet arra, hogy meghívjunk egy scriptet vele, vagy paramétereket adjunk át a GET metódust használva
Javaslatok weboldal • Felhasználók javaslatokat tehetnek azáltal, hogy egy textarea-t kitöltenek és elküldik • A javaslatok egy MySQL adatbázisban mentődnek el (web_db) • A javaslatok időrendben kerülnek megjelenítésre
Script logika • IF új javaslat kérelem érkezettTHEN • Jelenítsük meg az űrlapot • ELSE • IF formsubmitálódottTHEN • Szúrjuk be a javaslatot az adatbázisba • ENDIF • Kérdezzük le a javaslatokat az adatbázistáblából • IF létezik javaslat, azaz a lekérdezés nem üresTHEN • Jelenítsük meg • ELSE • Javaslat táblázat üres • ENDIF • ENDIF • Kínáljuk fel a linket, hogy a felhasználó tudjon megadni javaslatokat