OO PDO. Tehát PDO használatával, könnyen átállhatunk egy másik adatbáziskezelőre, anélkül hogy a kódot teljes egészében újraírnánk.

Hasonló dokumentumok
Extrémen brutál, gyors talpaló PHP nyelvhez (database). v2.1

Adatbáziskezelés php-ben MySQL adatbáziskezelı rendszert használva

Adatbázisok webalkalmazásokban

Adatbázis Rendszerek II. 1. SQL programozási felületek 39/1B IT MAN

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 4.ELŐADÁS. Adatbázis alapú alkalmazások készítése PHP-ben

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Adatbázis. AMP! (Apache + MySql + PHP) XAMPP, LAMP, MAMP, WAMP et cetera

Adatbázis használata PHP-ből

Adatbázis Rendszerek II. 8. Gyakorló környezet

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

Adatbázis Rendszerek I. 10. SQL alapok (DML esettanulmány)

Kilencedik témakör: Lazarus-Firebird. Készítette: Dr. Kotsis Domokos


PHP-MySQL. Adatbázisok gyakorlat

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni:

Adatbázis-kezelés. Harmadik előadás

B I T M A N B I v: T M A N

Tábla létrehozása: CREATE TABLE alma( ID INT( 3 ) NOT NULL PRIMARY KEY, Leiras VARCHAR( 100 ) );

Adatbázisok elleni fenyegetések rendszerezése. Fleiner Rita BMF/NIK Robothadviselés 2009

Az SQL adatbázisnyelv: DML

A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai

Adatbázis tartalmának módosítása

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:

Megtanuljuk, hogyan lehet egy web-alkalmazással adatbázishoz csatlakozni Pontosan megnézzük a PHP lehetőségeit o MySQL-hez o Oracle-höz

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

Adatbázisok I. Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai

Tranzakciókezelés PL/SQL-ben

SZÁMÍTÓGÉPES ADATBÁZIS-KEZELÉS. A MySQL adatbáziskezelő PHP folytatás JDBC, ODBC

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Java és web programozás

Vizuális programozás gyakorlat

Java programozási nyelv 11. rész Adatbázis-programozás

Táblakezelés: Open SQL Internal table. Tarcsi Ádám: Az SAP programozása 1.

Gyakorlás: Hozzunk létre egy Alkalmazottak táblát AZO szám, Részleg szöveg, Munkakör szöveg és BelépésDátuma dátum típussal.

Adatbázis rendszerek II. Adatbázis elérése C# kliens programból ADO.NET API-n keresztül

Készítette: Szabóné Nacsa Rozália

Adatbázis használat I. 5. gyakorlat

Java és web programozás

Adatbázis Rendszerek II. 2. Gyakorló környezet

SQL PÉLDATÁR. készült a PTE TTK Iskolai informatika III. kurzus teljesítésére

ADATBÁZIS-KEZELÉS FÉLÉVES FELADAT

Informatikai képzés Információs rendszerek dr. Hajas Csilla (ELTE IK)

Az SQL*Plus használata

Egészítsük ki a Drupal-t. Drupal modul fejlesztés

SQL haladó. Külső összekapcsolások, Csoportosítás/Összesítés, Beszúrás/Törlés/Módosítás, Táblák létrehozása/kulcs megszorítások

SQL DDL-2 (aktív elemek) triggerek

Tartalomjegyzék. Tartalomjegyzék 1. Az SQL nyelv 1 Az SQL DDL alapjai 2

Kliens oldali SQL-API

Debreceni Egyetem Informatikai Kar TANULÓI NYILVÁNTARTÓ SZOFTVER FIREBIRD ADATBÁZIS ALKALMAZÁSÁVAL

Webfejlesztés 4. alkalom

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

Adatbázis rendszerek SQL nyomkövetés

Adatbázis Rendszerek II. 2. Ea: Gyakorló környezet

BGF. 4. Mi tartozik az adatmodellek szerkezeti elemei

MySQL. Elektronikus jegyzet Széchenyi István Egyetem Távközlési tanszék

SQL jogosultság-kezelés. Privilégiumok Grant és Revoke Grant Diagrammok

Webapp (in)security. Gyakori hibákról és azok kivédéséről fejlesztőknek és üzemeltetőknek egyaránt. Veres-Szentkirályi András

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlaton a következőket fogjuk gyakorolni:

Kalmár György Adatbázis alapú rendszerek

Az SQL nyelv Structured Query Language (Struktúrált lekérdező nyelv)

Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN

SQL. 1.rész. 1.elıadás // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 1

Bevezetés az SQL-be. Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009

SQL- Utasítások csoportosítása Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

Kivételkezelés 2. SQLCODE lehetséges értékei:

B I T M A N B I v: T M A N

Programozás és adatbázis kezelés PHP ben

Adatbázis-kezelés, információs-rendszerek

Adatbázis kezelés Delphiben. SQL lekérdezések

Témák. JDBC Adatbázisok JDBC használatának lépései Tranzakciók Adatbázis tervezés EK diagram


Programozási technológia

Elemi alkalmazások fejlesztése IV.

GEIAL Kovács László. GEIAL Kovács László GEIAL Kovács László

SQL parancsok feldolgozása

LOGISZTIKAI ADATBÁZIS RENDSZEREK BEVEZETÉS

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

Objektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

Bevezetés: az SQL-be

Szálkezelés. Melyik az a hívás, amelynek megtörténtekor már biztosak lehetünk a deadlock kialakulásában?

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) ABR 2( Adatbázisrendszerek 2) 3. Előadás: Tárolt eljárások (folytatás) Nézetek

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu

Haladó DBMS ismeretek 1

Adatbázis másolás Slony-I segítségével

Adatbázis rendszerek. Molnár Bence. Szerkesztette: Koppányi Zoltán

MySQL kontra MongoDB programozás. SQL és NoSQL megközelítés egy konkrét példán keresztül

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE) október október 22. Adatbázisok 1 / 14

Adatbázisok elmélete 9. előadás

LBRA6i integrált rendszer

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni:

Adattípusok. Max. 2GByte

Adatbázisok elmélete 9. előadás

Adatbáziskezelés - SQL. Forrás: dr. Kovács László: Adatbázisok tervezésének és kezelésének módszertana Computerbooks

Adattípusok. Max. 2GByte

Összeállította: Sallai András. Levelezőszerver

Blahota István. SQLite alapok

LOGalyze Telepítési és Frissítési Dokumentáció Verzió 3.0

Átírás:

OO PDO PDO VS MYSQLi VS MYSQL ================================================================================ A PHP mysql metódusai elavultak, helyette lehet hazsnálni a MYSQLi metódusokat, amelyek szinte azonos szignatúrával használhatók. A MYSQLi-n az "i" betű az improved továbbfejlesztett szóból ered. Tehát a sima MYSQL metódusok használatát kerüljük. PRO KONTRA ================================================================================ A PDO 12 különböző adatbáziskezelőt támogat, míg a MYSQLi csak a mysqlt. Tehát PDO használatával, könnyen átállhatunk egy másik adatbáziskezelőre, anélkül hogy a kódot teljes egészében újraírnánk. Mind a kettő objektum orientált, de a MYSQLi-t lehet eljárásorientáltan is használni. Mindkettő támogatja a prepared statmentet, amely véd az SQL injection támadások ellen. A névvel ellátott paramétereket csak a PDO támogatja, melyet a prepared statmentnél kell használni. Hiánya a MYSQLi-nél nem egy nagy hátrány, megszokás kérdése. Mindkettő támogatja az Object mappingot, amely segítségével nagyon szépen lehet kezelni a rekordokat. Teljesítményben, mindkettő gyors bár a MYSQLi a tesztek alapján ~2.5%-al gyorsabb a prepared statementses lekérdezéseknél, míg a sima lekérdezések esetében ~6.5%-al gyorsabb.

CSATLAKOZÁS AZ ADATBÁZISHOZ 1. //A "dbname" értéke adja meg azt az adatbázist amihez csatlakoznmi szeretnénk 2. $servername = "localhost"; //szervernév 3. $username = "root"; //felhasználónév 4. $password = ""; //jelszó 5. $dbname = "tanulmany"; //adatbázis név amihez csatlakozni akarunk 6. try { 7. $con = new PDO("mysql:host=$servername;dbname=$dbName;", 8. $username, $password); 9. echo "Sikeres csatlakozás"; 10. } catch(pdoexception $e) { //a kivételkezelő catch ága, amely PDO kivételeket kezel 11. echo "Hiba: ".$e->getmessage(); 12. } CSATLAKOZÁS LEZÁRÁSA 1. $con = null; ADATBÁZIS LÉTREHOZÁSA Hibakezelés beállítása $con->setattribute(pdo::attr_errmode, ) 2. //újra csatlakozunk, viszont itt nem adjuk meg, hogy melyik adatbázishoz, hiszen azt később hozzuk létre 3. $con = new PDO("mysql:host=$servername;", 4. $username, $password); 5. $con- >setattribute(pdo::attr_errmode, PDO::ERRMODE_EXCEPTION); //Hiba esetén kivételt dob 6. //$con- >setattribute(pdo::attr_errmode, PDO::ERRMODE_WARNING); //Hiba esetén warning üzenet 7. //$con- >setattribute(pdo::attr_errmode, PDO::ERRMODE_SILENT); //Hiba esetén nem történik se mmi 8. 9. //$dbname nevű adatbázis létrehozása 10. $sql = "CREATE DATABASE ".$dbname." CHARACTER SET = 'UTF8'"; 11. $con->exec($sql); //sql parancs végrehajtása 12. echo "Adatbázis létrehozva"; 13. } catch(pdoexception $e) { //a kivételkezelő catch ága, amely PDO kivételeket kezel 14. echo "Hiba: ".$e->getmessage(); 15. }

TÁBLA LÉTREHOZÁSA 2. //adatbázis kijelölése 3. $con->exec("use ".$dbname); 4. 5. // sql utasítás ami létrehozza a diakok táblát 6. $sql = "CREATE TABLE diakok ( 7. id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 8. nev varchar(50), 9. osztaly varchar(5), 10. eletkor int 11. )"; 12. $con->exec($sql); //sql utasítás futtatása 13. echo "Tábla létrehozva"; 14. } catch(pdoexception $e) { //a kivételkezelő catch ága, amely PDO kivételeket kezel 15. echo "Hiba: ".$e->getmessage(); 16. } EGY ADAT BESZÚRÁSA (a legutóbb beszúrt sor ID visszaadása) 2. //karakterkódolás beállítása 1* kell egy csatlakozáshoz beállítani 3. $con->exec("set NAMES 'utf8'"); 4. 5. $sql="insert INTO diakok (nev, osztaly, eletkor) 6. VALUES ('Aladár Péter', 'SZFX',21)"; 7. $con->exec($sql); 8. $id = $con->lastinsertid(); //legutóbbi beszúrt sor idja 9. echo "Legutóbbi beszúrt sor idja: ".$id; 10. } catch(pdoexception $e) { //a kivételkezelő catch ága, amely PDO kivételeket kezel 11. echo "Hiba: ".$e->getmessage(); 12. } TÖBB ADAT BESZÚRÁSA (tranzakciókezelés) 2. $con->begintransaction(); //tranzakciókezelés kezdete 3. 4. $con->exec("insert INTO diakok (nev, osztaly, eletkor) 5. VALUES ('Aladár Józsi', 'SZFX',25)"); 6. $con->exec("insert INTO diakok (nev, osztaly, eletkor) 7. VALUES ('Példa Léna', 'SZFX',26)"); 8. 9. $con->commit(); //ha minden rendben, mehet adatbázisba 10. echo "Adatok felvitele sikeres"; 11. } catch(pdoexception $e) { 12. $con->rollback(); //hiba esetén nem kerül semmi adatbázisba 13. echo "Hiba: ".$e->getmessage(); 14. }

PREPARED STATEMENT (SQL injection támadás) A prepared statement az SQL injection támadások ellen nyújt védelmet. SQL injection: Amikor a megírt sql sztringünkbe nem értéket szúrunk be, hanem egy rossz indulatú SQL utasítást. PL.: Tegyük fel, hogy van egy hozzászólás űrlap az oldalunkon egyetlen beviteli mezővel (message). Az sql injection esetén a felhasználó nem egy hozzászólást küld a szervernek, hanem egy rossz indulatú SQL utasítást: "hozzászólás');drop ('users" Vizsgáljuk meg mi történik ha ezt beszúrjuk az SQL utasításunkba: INSERT INTO uzenetek (uzenet) VALUES('$_POST["messages"]') Ebben az esetben, az SQL utasítás alapja kerül csak megírásra az értékek, amelyek az elküldött űrlapból érkeznek azokat csak később helyettesíti be a rendszer az SQL utasításba. Amikor a rendszer egyesével behelyettesíti az értékeket, mindegyiken végrehajt egy ellenőrzést. Ha valamelyik ellenőrzés elbukik, akkor nem hajtja végre a rendszer az SQL utasítást. 2. //1. felkészülünk az sql utasításra, az űrlapból érkező adatok helyére? jelet r akunk 3. $stmt = $con->prepare("insert INTO diakok (nev, osztaly, eletkor) 4. VALUES(?,?,?)"); 5. //2. változók hozzákapcsolása az sql utasításhoz (sorrendre figyelni) 6. //Az 1-es az első kérdőjelhez, a 2-es a másodikhoz és így tovább 7. $stmt->bindparam(1, $nev); 8. $stmt->bindparam(2, $osztaly); 9. $stmt->bindparam(3, $eletkor); 10. 11. //3. Változók feltöltése értékkel (űrlapból) és az sql utasítás futtatása. 12. $nev = "Prepare Pista"; 13. $osztaly = "STMT"; 14. $eletkor = "22"; 15. $stmt->execute(); 16. 17. //3. Újabb sor felvitele. Csak az értékek változnak az sql utasítás ugyan az. 18. $nev = "Prepare Béla"; 19. $osztaly = "STMT"; 20. $eletkor = "23"; 21. $stmt->execute(); 22. 23. } catch(pdoexception $e) { 24. echo "Hiba: ".$e->getmessage(); 25. }

PREPARED STATEMENT (nevesített paraméterekkel) Ugyan az, mint az előző, csak a kérdőjelek helyett nevesített paraméterlistát használunk. Előnye hogy nem kell a sorrendre figyelnünk. 2. $stmt = $con->prepare("insert INTO diakok (nev, osztaly, eletkor) 3. VALUES(:nev,:osztaly,:eletkor)"); 4. //az előzőhöz hasonlóan csak nevesített paraméterekel 5. /*$stmt->bindparam(':nev', $nev); 6. $stmt->bindparam(':osztaly', $osztaly); 7. $stmt->bindparam(':eletkor', $eletkor); 8. 9. $nev = "Neves Prepare"; 10. $osztaly = "STMT"; 11. $eletkor = "22"; 12. $stmt->execute();*/ 13. 14. //a fentivel ekvivalens, csak rövidebb 15. $stmt->execute([ 16. 'nev' => 'Neves Prepare', 17. 'osztaly' => 'STMT', 18. 'eletkor' => 222, 19. ]); 20. } catch(pdoexception $e) { 21. echo "Hiba: ".$e->getmessage(); 22. } SELECT (+prepared statements) 2. $stmt = $con->prepare("select * FROM diakok WHERE eletkor =?"); 3. $stmt->bindparam(1, $eletkor); 4. $eletkor = 22; 5. $stmt->execute(); 6. $result = $stmt->setfetchmode(pdo::fetch_assoc); 7. while ($row = $stmt->fetch()) { 8. print_r($row); 9. } 10. 11. } catch(pdoexception $e) { 12. echo "Hiba: ".$e->getmessage(); 13. } UPDATE (+prepared statements) 2. $stmt = $con- >prepare("update diakok SET nev='norbi Update' WHERE eletkor =?"); 3. $stmt->bindparam(1, $eletkor); 4. $eletkor = 22; 5. $stmt->execute(); 6. echo "Sikers update"; 7. } catch(pdoexception $e) { 8. echo "Hiba: ".$e->getmessage(); 9. }

DELTE (+prepared statements) 2. $stmt = $con->prepare("delete FROM diakok WHERE eletkor =?"); 3. $stmt->bindparam(1, $eletkor); 4. $eletkor = 21; 5. $stmt->execute(); 6. echo "Rekordok törlve"; 7. } catch(pdoexception $e) { 8. echo "Hiba: ".$e->getmessage(); 9. } TÁBLA TÖRLÉSE 2. $con->exec("drop TABLE IF EXISTS diakok"); 3. echo "Sikers tábla törlés"; 4. } catch(pdoexception $e) { 5. echo "Hiba: ".$e->getmessage(); 6. } ADATBÁZIS TÖRLÉSE 2. $con->exec("drop DATABASE IF EXISTS tanulmany"); 3. echo "Sikers adatbázis törlés"; 4. } catch(pdoexception $e) { 5. echo "Hiba: ".$e->getmessage(); 6. }