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