Programare Web - Accesul la baze de date prin PHP

9,499 views

Published on

Access to databases (MySQL and SQLite) via PHP. Several examples.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
9,499
On SlideShare
0
From Embeds
0
Number of Embeds
78
Actions
Shares
0
Downloads
259
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Programare Web - Accesul la baze de date prin PHP

  1. 1. Programare Web Accesul la bazele de date prin PHP Dr. Sabin-Corneliu Buraga Facultatea de Informatica Universitatea “A.I.Cuza” – Iasi, Romania http://www.infoiasi.ro/~busaco/
  2. 2. <ul><li>PHP ( PHP: Hypertext Preprocessor ) </li></ul><ul><ul><li>Accesarea bazelor de date prin PHP </li></ul></ul><ul><ul><ul><li>Preliminarii </li></ul></ul></ul><ul><ul><ul><li>Suportul oferit de PHP </li></ul></ul></ul><ul><ul><ul><li>Conectivitatea cu MySQL </li></ul></ul></ul><ul><ul><ul><li>Conectivitatea cu SQLite </li></ul></ul></ul>cuprins
  3. 3. baze de date <ul><li>Organizarea si regasirea facila a informatiilor, conduc la stocarea acestora in baze de date (relationale) </li></ul><ul><ul><li>Fiecare baza de date contine mai multe tabele </li></ul></ul><ul><ul><li>O tabela este structurata în coloane (cimpuri) si rânduri (înregistrari) </li></ul></ul><ul><ul><li>Fiecare cimp se desemnat de un nume si un tip de date (numeric, sir de caractere, data,...) </li></ul></ul><ul><ul><li>Pentru facilitarea cautarii/sortarii pot fi asociati si indecsi , conform valorilor unui/unor cimp(uri) </li></ul></ul><ul><ul><li>Intre tabelele unei baze de date se pot defini diverse relatii </li></ul></ul>
  4. 4. baze de date <ul><li>Ansamblul de aplicatii care realizeaza managementul bazelor de date se numeste sistem de baze de date relational ( Relational DataBase Management System – RDBMS ) </li></ul><ul><ul><li>DB2 </li></ul></ul><ul><ul><li>Informix </li></ul></ul><ul><ul><li>Microsoft SQL Server </li></ul></ul><ul><ul><li>MySQL </li></ul></ul><ul><ul><li>Oracle </li></ul></ul><ul><ul><li>PostgreSQL </li></ul></ul><ul><ul><li>… </li></ul></ul>
  5. 5. baze de date <ul><li>Operatiile asupra bazelor de date, tabelelor, valorilor inregistrarilor etc. se specifica intr-un limbaj declarativ: SQL ( Structured Query Language ) </li></ul><ul><li>Accesul la un server de gestiune a bazelor de date se realizeaza via un client </li></ul>
  6. 6. MySQL <ul><li>Arhitectura open source </li></ul><ul><li>Foarte rapid, optimizat pentru acces la date </li></ul><ul><li>www.mysql.com </li></ul><ul><li>Larg folosit in cadrul solutiilor de comert electronic ( e.g. , aplicatii Web de tip e-shop ) </li></ul><ul><li>API-uri disponibile in majoritatea limbajelor de programare (C, C++, Perl, PHP, Python,…) </li></ul><ul><li>Componente: server ( mysqld ) + client ( mysql , PHPMyAdmin , script CGI, program PHP,…) </li></ul><ul><li>Manualul: http://dev.mysql.com/doc/mysql/en </li></ul>
  7. 7. MySQL <ul><li>Alte facilitati: </li></ul><ul><ul><li>Crearea “din zbor” de variabile ce pot fi ulterior refolosite in interogari </li></ul></ul><ul><ul><li>Replicarea datelor </li></ul></ul><ul><ul><li>Paleta larga de functii, operatori si structuri de control </li></ul></ul><ul><ul><li>Suport pentru triggers si clusters </li></ul></ul><ul><ul><li>Multe altele </li></ul></ul>
  8. 8. MySQL <ul><li>Accesul la server via un client in linie de comanda: mysql [ optiuni ] [ nume_baza_de_date ] </li></ul><ul><li>Optiuni uzuale: -h masina (numele masinii/serverului) -p [ parola ] (parola pentru autentificare) -u utilizator (numele utilizatorului) </li></ul><ul><li>Exemplu: mysql –u tux –p </li></ul><ul><li>Alte detalii: info mysql (in UNIX/Linux) </li></ul>
  9. 9. MySQL | exemplu <ul><li>(infoiasi)$ mysql –u tux –p </li></ul><ul><li>Enter password: </li></ul><ul><li>Welcome to the MySQL monitor. Commands end with ; or g. </li></ul><ul><li>Your MySQL connection id is 2 to server version: 4.0.11a-gamma </li></ul><ul><li>Type 'help;' or 'h' for help. Type 'c' to clear the buffer. </li></ul><ul><li>mysql> use clienti; </li></ul><ul><li>Reading table information for completion of table and column names </li></ul><ul><li>Database changed </li></ul>
  10. 10. MySQL | exemplu <ul><li>mysql> select nume, prenume from comenzi; </li></ul><ul><li>+---------+---------+ </li></ul><ul><li>| nume | prenume | </li></ul><ul><li>+---------+---------+ </li></ul><ul><li>| Savon | Buritin | </li></ul><ul><li>| Vigoniu | Bonzui | </li></ul><ul><li>| Nilla | Sapo | </li></ul><ul><li>| Lzian | Xi | </li></ul><ul><li>| Tin | Debre | </li></ul><ul><li>+---------+---------+ </li></ul><ul><li>5 rows in set (0.01 sec) </li></ul>
  11. 11. MySQL | exemplu <ul><li>mysql> select nume from comenzi where id > 3; </li></ul><ul><li>+-------+ </li></ul><ul><li>| nume | </li></ul><ul><li>+-------+ </li></ul><ul><li>| Lzian | </li></ul><ul><li>| Tin | </li></ul><ul><li>+-------+ </li></ul><ul><li>2 rows in set (0.11 sec) </li></ul>
  12. 12. MySQL <ul><li>Alte operatii uzuale: </li></ul><ul><ul><li>insert </li></ul></ul><ul><ul><li>update </li></ul></ul><ul><ul><li>delete </li></ul></ul><ul><ul><li>create database </li></ul></ul><ul><ul><li>create table </li></ul></ul><ul><ul><li>drop table </li></ul></ul><ul><ul><li>grant </li></ul></ul>
  13. 13. MySQL | exemplu <ul><li>mysql> create database studenti ; </li></ul><ul><li>Query OK, 1 row affected (0.00 sec) </li></ul><ul><li>mysql> use studenti </li></ul><ul><li>Database changed </li></ul><ul><li>mysql> create table note ( </li></ul><ul><li>-> nume char (40), </li></ul><ul><li>-> adresa char(40), </li></ul><ul><li>-> grupa integer, </li></ul><ul><li>-> nota integer not null); </li></ul><ul><li>Query OK, 0 rows affected (0.01 sec) </li></ul><ul><li>mysql> insert into note values </li></ul><ul><li>-> (&quot; Radu Filip &quot;, &quot; [email_address] &quot;, 2 , 10 ); </li></ul><ul><li>Query OK, 1 row affected (0.00 sec) </li></ul>Am creat o baza de date, iar in cadrul ei o tabela.
  14. 14. MySQL | exemplu <ul><li>mysql> grant usage on studenti .* to [email_address] ; </li></ul><ul><li>Query OK, 0 rows affected (0.00 sec) </li></ul><ul><li>mysql> grant select, insert, delete on studenti .* to [email_address] ; </li></ul><ul><li>Query OK, 0 rows affected (0.00 sec) </li></ul>Am acordat permisiuni de utilizare a bazei de date.
  15. 15. MySQL <ul><li>Accesul la server via un client Web folosind aplicatia PHPMyAdmin </li></ul><ul><ul><li>Instrument Web de management al serverului MySQL: crearea si invocare de interogari SQL, export/import in/din diverse formate, interfata atractiva in multe limbi etc. </li></ul></ul><ul><ul><li>http://www.phpmyadmin.net/ </li></ul></ul>
  16. 17. <ul><li>PHP ofera suport pentru o multitudine de servere/tehnologii de baze de date: </li></ul><ul><ul><li>MySQL – functiile mysql_*() , mysqli_*() </li></ul></ul><ul><ul><li>PostgreSQL – functiile pg_*() </li></ul></ul><ul><ul><li>SQLite – functiile sqlite_*() </li></ul></ul><ul><ul><li>Oracle – functiile ora_*() </li></ul></ul><ul><ul><li>ODBC ( Open DataBase Connectivity ) </li></ul></ul><ul><ul><li>etc. </li></ul></ul>php | bd
  17. 18. <ul><li>Functii predefinite pentru accesul la MySQL: </li></ul><ul><ul><li>Conectare la serverul MySQL: mysql_connect() </li></ul></ul><ul><ul><li>Selectare (utilizare) baza de date: mysql_select_db() </li></ul></ul><ul><ul><li>Executia unei interogari: mysql_query() </li></ul></ul><ul><ul><li>Raportare de erori: mysql_errno() , mysql_error() </li></ul></ul><ul><ul><li>Preluarea rezultatelor intr-un tablou: mysql_fetch_array() </li></ul></ul><ul><ul><li>Multe altele… </li></ul></ul>php | bd
  18. 19. php | bd
  19. 20. <ul><li>Pentru inceput, vom crea un cont MySQL care sa asigure acces autentificat din programele PHP asupra bazei de date students </li></ul><ul><li>(infoiasi)$ mysql –u root mysql </li></ul><ul><li>mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON students.* TO 'tux'@'localhost' IDENTIFIED BY 'p@rola' WITH GRANT OPTION; </li></ul><ul><li>Query OK, 0 rows affected (0.11 sec) </li></ul>php | bd | exemplu
  20. 21. <ul><li>Folosind mysql in linia de comanda sau PHPMyAdmin , cream tabela students cu structura: </li></ul><ul><li>CREATE TABLE IF NOT EXISTS `students` ( </li></ul><ul><li>`name` varchar(50) NOT NULL default '', </li></ul><ul><li>`year` enum('1','2','3') NOT NULL default '1', </li></ul><ul><li>`id` int(11) NOT NULL auto_increment, </li></ul><ul><li>`age` smallint(2) unsigned zerofill NOT NULL default '00', </li></ul><ul><li>PRIMARY KEY (`id`) </li></ul><ul><li>) ENGINE=MyISAM DEFAULT CHARSET=latin1 </li></ul><ul><li>AUTO_INCREMENT=1; </li></ul>php | bd | exemplu
  21. 22. php Cream tabela
  22. 23. php Generam structura
  23. 24. php Confirmarea crearii
  24. 25. php Eventual, inseram o inregistrare
  25. 26. <ul><li>// conectarea la serverul MySQL </li></ul><ul><li>$conexiune = mysql_connect (' localhost ', ' tux ', ' [email_address] '); </li></ul><ul><li>// deschidem baza de date </li></ul><ul><li>mysql_select_db (' students ', $conexiune) </li></ul><ul><li>// formulam o interogare & o executam </li></ul><ul><li>$sql = &quot; select name, year from students where year = 2 &quot;; </li></ul><ul><li>$interog = mysql_query ($sql, $conexiune); </li></ul><ul><li>// salvam într-un tablou înregistrarile gasite </li></ul><ul><li>$inreg = mysql_fetch_array ($interog); </li></ul><ul><li>while ($inreg) { </li></ul><ul><li>echo ('<p>Studentul ' . $inreg[' name '] . </li></ul><ul><li>' este in anul ' . $inreg[' year '] . '</p>'); </li></ul><ul><li>$inreg = mysql_fetch_array ($interog); </li></ul><ul><li>} </li></ul><ul><li>mysql_close ($conexiune); </li></ul>php | bd | exemplu Afisam numele studentilor din anul 2
  26. 27. <ul><li>SQLite </li></ul><ul><ul><li>Extensie PHP pentru acces la biblioteca SQLite </li></ul></ul><ul><ul><li>Baza de date este stocata ca fisier obisnuit, fara a fi necesara conectarea la un server de baze de date extern </li></ul></ul><ul><ul><li>Se ofera suport pentru interogari SQL </li></ul></ul><ul><ul><li>Detalii la http://sqlite.org/ </li></ul></ul><ul><ul><li>Exista posibilitatea administrarii via PHPSQLiteAdmin : http://phpsqliteadmin.sourceforge.net </li></ul></ul>php | bd
  27. 28. <ul><li>// deschidem o baza de date SQLite (daca nu exista, va fi creata) </li></ul><ul><li>if (($bd = sqlite_open (' studenti ', 0666, $er)) === FALSE) { die ($er); } </li></ul><ul><li>// cream o tabela & inseram o inregistrare </li></ul><ul><li>sqlite_exec (' CREATE TABLE studs (name varchar(50), age smallint(2)) ', $bd); </li></ul><ul><li>sqlite_exec (&quot; INSERT INTO studs VALUES ('…', &quot; . rand(10, 90) . ' ) ', $bd); </li></ul><ul><li>// selectam studentii cu virste intre 20 si 50 </li></ul><ul><li>$rez = sqlite_query (' SELECT * FROM studs WHERE age < 50 and age > 20 ORDER BY age desc ', $bd); </li></ul><ul><li>// afisam… </li></ul><ul><li>while ($r = sqlite_fetch_array ($rez)) { </li></ul><ul><li>echo '<p>' . $r[' name '] . ' are ' . $r[' age '] . ' de ani.</p>'; </li></ul><ul><li>} </li></ul>php | bd | exemplu
  28. 29. <ul><li>PHP ( PHP: Hypertext Preprocessor ) </li></ul><ul><ul><li>Accesarea bazelor de date prin PHP </li></ul></ul><ul><ul><ul><li>Preliminarii </li></ul></ul></ul><ul><ul><ul><li>Suportul oferit de PHP </li></ul></ul></ul><ul><ul><ul><li>Conectivitatea cu MySQL </li></ul></ul></ul><ul><ul><ul><li>Conectivitatea cu SQLite </li></ul></ul></ul>rezumat
  29. 30. <ul><li>Intrebari…? </li></ul>

×