wp predavanja 8

Upload: dragan-volkov

Post on 10-Jan-2016

21 views

Category:

Documents


0 download

DESCRIPTION

php

TRANSCRIPT

  • PHP (Lekcija 8) Miladin [email protected]

  • PHP7 lekcijaDB & PHP - PDO

  • Abstraction Layers - PHP Data ObjectsPDO je PHP ekstentizija za formalizovanje povezivanaj PHP sa bazama podataka uz korienje jedinstvenog interfejsa. Ovo omoguava programerima da kreiraju kod koji je portabilan za razliite baze i platforme. PDO je abstraction layer Slian je sa Perls DBI

  • Kreiranje tabele. CREATE TABLE animals ( animal_id MEDIUMINT(8) NOT NULL AUTO_INCREMENT PRIMARY KEY, animal_type VARCHAR(25) NOT NULL, animal_name VARCHAR(25) NOT NULL ) ENGINE = MYISAM ; INSERT INTO `animals` (`animal_id`, `animal_type`, `animal_name`) VALUES (1, 'kookaburra', 'bruce'), (2, 'emu', 'bruce'), (3, 'goanna', 'bruce'), (4, 'dingo', 'bruce'), (5, 'kangaroo', 'bruce'), (6, 'wallaby', 'bruce'), (7, 'wombat', 'bruce'), (8, 'koala', 'bruce');

  • Provera drajvera.

  • PrimeriDBLIB: FreeTDS / Microsoft SQL Server / Sybase Firebird (http://firebird.sourceforge.net/ ): Firebird/Interbase 6 IBM (IBM DB2) INFORMIX - IBM Informix Dynamic Server MYSQL (http://www.mysql.com/ ): MySQL 3.x/4.0 OCI (http://www.oracle.com ): Oracle Call Interface ODBC: ODBC v3 (IBM DB2 and unixODBC) PGSQL (http://www.postgresql.org /): PostgreSQL SQLITE (http://sqlite.org/ ): SQLite 3.x

  • Verat.netsqlitesqlite2

  • Povezivanje sa SQLite

  • Pravljenje tabela u memoriji
  • Povezivanje sa MySQL
  • Povezivanje sa ODBC

  • Zatvaranje konekcije
  • PDO Query - Insert
  • PDO Query - Select

  • PDO Query - UPDATE
  • FETCH Modes - FETCH ASSOC
  • FETCH ASSOC - nastavak/***stampanje iz strukture***/ foreach($resultas$key=>$val) { echo$key.'-'.$val.''; } /***zatvranje konekcije***/ $dbh=null; } catch(PDOException$e) { echo$e->getMessage(); } ?>

    RezultatPovezivanje uspelo animal_id - 1 animal_type - emu animal_name - bruce

  • FETCH NUM
  • FETCH NUM nastavak/***stampanje iz strukture***/ foreach($resultas$key=>$val) { echo$key.'-'.$val.''; } /***zatvranje konekcije***/ $dbh=null; } catch(PDOException$e) { echo$e->getMessage(); } ?>RezultatPovezivanje uspelo 0 - 1 1 - emu 2 - bruce

  • FETCH BOTH

    RezultatPovezivanje uspelo animal_id 1 0 - 1 animal_type emu 1 - emu animal_name bruce 2 - bruce

  • FETCH OBJECT RezultatPovezivanje uspelo 1 emu bruce

  • FETCH LAZY - kombinacija PDO::FETCH_BOTH & PDO::FETCH_OBJ

  • FETCH CLASS
  • FETCH CLASS nastavak 1 /***parametri za povezivanje sa bazom podataka***/ $hostname='localhost'; $username='username'; $password='password'; $password='password'; try{ $dbh=newPDO("mysql:host=$hostname;dbname=animals",$username,$password); /***poruka da vidimo da li proba radi***/ echo' Povezivanje uspelo '; /***SQLSELECT***/ $sql="SELECT*FROManimals"; /***prebacivanje u PDOStatementobjekt***/ $stmt=$dbh->query($sql); /***prebacivanje u klasu animals***/ $obj=$stmt->fetchALL(PDO::FETCH_CLASS,'animals');

  • FETCH CLASS nastavak 2/***stampanje iz strukture***/ foreach($objas$animals) { /***capitalizeTypemethod***/ echo$animals-> capitalizeType().''; } /***zatvranje konekcije***/ $dbh=null; } catch(PDOException$e) { echo$e->getMessage(); } ?>

    RezultatPovezivanje uspelo Emu Funnel Web Lizard Dingo Kangaroo Wallaby Wombat Koala Kiwi

  • PDO alternativa PDO::fetch & PDO::FETCH_CLASS. PDOStatement::fetchObject()
  • PDO alternativa PDO::fetch & PDO::FETCH_CLASS. PDOStatement::fetchObject() nastavak 1/***parametri za povezivanje sa bazom podataka***/ $hostname='localhost'; $username='username'; $password='password'; $password='password'; try{ $dbh=newPDO("mysql:host=$hostname;dbname=animals",$username,$password); /***poruka da vidimo da li proba radi***/ echo' Povezivanje uspelo '; /***SQLSELECT***/ $sql="SELECT*FROManimals"; /***prebacivanje u PDOStatementobjekt***/ $stmt=$dbh->query($sql); /***prebacivanje u klasuanimalsclass***/ $animals=$stmt->fetchObject('animals'); /***stampanje atributa***/ echo$animals->animal_id.''; echo$animals->capitalizeType().''; echo$animals->animal_name;

  • PDO alternativa PDO::fetch & PDO::FETCH_CLASS. PDOStatement::fetchObject() nastavak 2/***zatvaranje konekcije***/ $dbh=null; } catch(PDOException$e) { echo$e->getMessage(); } ?> RezultatPovezivanje uspelo 1 Emu bruce

  • FETCH INTO
  • FETCH INTO nastavak 1/***parametri za povezivanje sa bazom podataka***/ $hostname='localhost'; $username='username'; $password='password'; try{ $dbh=newPDO("mysql:host=$hostname;dbname=animals",$username,$password); /***poruka da vidimo da li proba radi***/ echo' Povezivanje uspelo '; /***SQLSELECT***/ $sql="SELECT*FROManimals"; /***prebacivanje u PDOStatementobjekt***/ $stmt=$dbh->query($sql); /***postavljanjefetchmodesaPDO::setFetchMode()***/ $stmt->setFetchMode(PDO::FETCH_INTO,newanimals);

  • FETCH INTO nastavak 2/***stampanje prekoPDOStatementdirektno***/ foreach($stmtas$animals) { echo$animals-> capitalizeType().''; } /***zatvaranje konekcije***/ $dbh=null; } catch(PDOException$e) { echo$e->getMessage(); } ?> RezultatPovezivanje uspelo Emu Funnel Web Lizard Dingo Kangaroo Wallaby Wombat Koala Kiwi

  • Error Handling 1 Povezivanje uspelo Warning: Invalid argument supplied for foreach() in /www/pdo.php on line 12

  • Error Handling 2 Povezivanje uspelo SQLSTATE[42S22]: Column not found: 1054 Unknown column 'username' in 'field list'

  • Error Handling 3 Povezivanje uspelo Warning: PDO::query() [function.PDO-query]: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'username' in 'field list' in /www/pdo.php on line 14 Warning: Invalid argument supplied for foreach() in /www/pdo.php on line 14

  • Error Handling 4 Povezivanje uspelo Warning: Invalid argument supplied for foreach() in /www/pdo.php on line 14

  • Error Handling 5 Povezivanje uspelo 42S22

  • Error Handling 6 Povezivanje uspelo 42S02 1146 Table 'animals.users' doesn't exist

  • Prepared statements pripremljeni iskaziU nekim sluajevima je potrebno izvravati neki SQL iskaz vie puta. U tim sluajevima je korisno napraviti pripremljeni SQL iskaz, tj. Prepared Statement objekat. Pripremljen iskaz moe biti upotrebljenbez parametara, mada je u najveem broju sluajeva njegova upotreba upravo takva da se paramteri koriste.PreparedStatementupdateTabela1 = con.prepareStatement( "UPDATE Tabela1 SET Atribute1 = ? WHERE Atribute2 LIKE ?");updateSales.setInt(1, 43);updateSales.setString(2, "TestString");updateSales.executeUpdate():Parametrisu u SQL iskazu obeleeni znakom pitanja, i oni e pre samog izvravanja iskaza biti prosleeni odgovarajuim set.

  • Prepared statements pripremljeni iskazi - PDOPDO driver omoguava klijent i server strani keiranje upita i meta podataka. Takoe, dobra je preventiva protiv SQL injection pozivanjem PDO::quote() methode. PDO prihvata dve vrste markera parametara. imenovani - :name znak pitanja - question mark - ? Mora se izabrati jedno ne mogu se meati. PDO::prepare & PDOStatement::execute

  • Pripremljeni iskazi 1a
  • Pripremljeni iskazi 1b/***povezivanjeparamatera***/ $stmt->bindParam(':animal_id',$animal_id,PDO::PARAM_INT); $stmt->bindParam(':animal_name',$animal_name,PDO::PARAM_STR,5); /***izvrsavanje iskaza***/ $stmt->execute(); /***dodeljivanje rezultata***/ $result=$stmt->fetchAll(); /***stamanje iz petlje***/ foreach($resultas$row) { echo$row['animal_id'].''; echo$row['animal_type'].''; echo$row['animal_name']; }

  • Pripremljeni iskazi 1c/***zatvranje konekcije***/ $dbh=null; } catch(PDOException$e) { echo$e->getMessage(); } ?>

    RezultatPovezivanje uspelo 6 wallaby bruce

  • Pripremljeni iskazi 2a
  • Pripremljeni iskazi 2b/***povezivanjeparamatera***/ $stmt->bindParam(':animal_id',$animal_id,PDO::PARAM_INT); $stmt->bindParam(':animal_name',$animal_name,PDO::PARAM_STR,5); /***promenaanimal_id***/ $animal_id=3; /***izvrsavanje iskaza***/ $stmt->execute(); /***stamanje iz petlje***/ while($row=$stmt->fetch()) { echo$row['animal_id'].''; echo$row['animal_type'].''; echo$row['animal_name']; }

  • Pripremljeni iskazi 2c /***zatvranje konekcije***/ $dbh=null; } catch(PDOException$e) { echo$e->getMessage(); } ?>

    RezultatPovezivanje uspelo 3 lizard bruce

  • Pripremljeni iskazi 3a
  • Pripremljeni iskazi 3b/***povezivanjeparamatera***/ $stmt->bindParam(':animal_id',$animal_id,PDO::PARAM_INT); $stmt->bindParam(':animal_name',$animal_name,PDO::PARAM_STR,5); /***promenaanimal_id***/ $animal_id=3; $animal_name='kevin'; /***izvrsavanje iskaza***/ $stmt->execute(); /***stamanje iz petlje***/ while($row=$stmt->fetch()) { echo$row['animal_id'].''; echo$row['animal_type'].''; echo$row['animal_name'].''; }

  • Pripremljeni iskazi 3c /***promenaanimal_id***/ $animal_id=7; $animal_name='bruce'; /***izvrsavanje iskaza***/ $stmt->execute(); /***stamanje iz petlje***/ while($row=$stmt->fetch()) { echo$row['animal_id'].''; echo$row['animal_type'].''; echo$row['animal_name'].''; }

  • Pripremljeni iskazi 3d/***promenaanimal_id***/ $animal_id=4; /***izvrsavanje iskaza***/ $stmt->execute(); /***stamanje iz petlje***/ while($row=$stmt->fetch()) { echo$row['animal_id'].''; echo$row['animal_type'].''; echo$row['animal_name']; }

  • Pripremljeni iskazi 3e/***zatvaranje konekcije***/ $dbh=null; } catch(PDOException$e) { echo$e->getMessage(); } ?>

    RezultatPovezivanje uspelo7 wombat bruce 4 dingo bruce

  • Pripremljeni iskazi Niz vrednosti 1a
  • Pripremljeni iskazi Niz vrednosti 1b /***povezivanjeparamatera***/ $stmt->bindParam(':animal_id',$animal_id,PDO::PARAM_INT); $stmt->bindParam(':animal_name',$animal_name,PDO::PARAM_STR,5); /***promenaanimal_id***/ $data=array('animal_id'=>3,'animal_name'=>'bruce'); /***izvrsavanje iskaza***/ $stmt->execute($data); /***stamanje iz petlje***/ while($row=$stmt->fetch()) { echo$row['animal_id'].''; echo$row['animal_type'].''; echo$row['animal_name'].''; }

  • Pripremljeni iskazi Niz vrednosti 1c/***promenaanimal_id***/ $data=array('animal_id'=>4,'animal_name'=>'bruce'); /***izvrsavanje iskaza***/ $stmt->execute($data); /***stamanje iz petlje***/ while($row=$stmt->fetch()) { echo$row['animal_id'].''; echo$row['animal_type'].''; echo$row['animal_name'].''; }

  • Pripremljeni iskazi Niz vrednosti 1d/***promenaanimal_id***/ $data=array('animal_id'=>9,'animal_name'=>'bruce'); /***izvrsavanje iskaza***/ $stmt->execute($data); /***stamanje iz petlje***/ while($row=$stmt->fetch()) { echo$row['animal_id'].''; echo$row['animal_type'].''; echo$row['animal_name']; } /***zatvaranje konekcije***/ $dbh=null; } catch(PDOException$e) { echo$e->getMessage(); } ?>

  • Transakcije 1a
  • Transakcije 1b/***INSERT***/$dbh->exec("INSERTINTOanimals(animal_type,animal_name)VALUES('emu','bruce')");$dbh->exec("INSERTINTOanimals(animal_type,animal_name)VALUES('funnelweb','bruce')");$dbh->exec("INSERTINTOanimals(animal_type,animal_name)VALUES('lizard','bruce')");$dbh->exec("INSERTINTOanimals(animal_type,animal_name)VALUES('dingo','bruce')");$dbh->exec("INSERTINTOanimals(animal_type,animal_name)VALUES('kangaroo','bruce')");$dbh->exec("INSERTINTOanimals(animal_type,animal_name)VALUES('wallaby','bruce')");$dbh->exec("INSERTINTOanimals(animal_type,animal_name)VALUES('wombat','bruce')");$dbh->exec("INSERTINTOanimals(animal_type,animal_name)VALUES('koala','bruce')");$dbh->exec("INSERTINTOanimals(animal_type,animal_name)VALUES('kiwi','bruce')");

  • Transakcije 1c /***izvrsavanje transakcije***/ $dbh->commit(); /***poruka koja kaze da je uspesno zavrseno***/ echoPodaci uneti uspesno/>'; } catch(PDOException$e) { /***rollbacku slucaju problema***/ $dbh->rollback(); /***stampa sqliskaza ierrormessage***/ echo$sql.''.$e->getMessage(); } ?>

  • Poslednji insertovani - Id
  • Dodatne informacijehttp://www.php.net/manual/en/book.pdo.php