Laborator 5. PHP si MySQL -...

14
Laborator 5. PHP si MySQL 1. Introducere MySQL este cea mai populara aplicatie open-source de baze de date folosita cu PHP. O baza de date de obicei contine una sau mai multe tabele, folosita pentru a stoca informatii pe categori. Tabelele contin coloane si inregistrari (randuri) cu date. Reguli de sintaxa MySQL Fiecare baza de date si fiecare tabela este indentificata printr-un nume. Regulile de baza MySQL pentru nume de baze de date, tabele, si coloane sunt: Numele poate avea maxim 64 de caractere. Poate contine numai litere, numere, si sublinia (indicat fara spatii). Numele poate incepe cu un numar, dar nu poate contine numai numere. tabela nu poate avea doua coloane cu acelasi nume si o baza de date nu poate avea doua tabele cu acelasi nume. Numele tabelelor si coloanelor sunt case-sensitive ("Php" e diferit de "php"). Cand se creaza un tabel in MySQL, trebuie definit tipul de date pe care fiecare coloana il va contine. Exista trei tipuri principale: Text (strings), Numere, Data si Ora; si doua tipuri secundare: Liste predefinite si Date binare. Tipul de date dicteaza ce informatie poate fi stocata si cum, acesta influenteaza si performanta generala a bazei de date. 2. PHP MySQL – utilizare MySQLi PHP are trei moduri diferite prin care se poate conecta si interactiona cu baza de date MySQL : extensia MySQL originala (cu functii), MySQL Improved (MySQLi, obiect- orientat), sau PHP Data Objects (PDO, obiect-orientat). Ele nu pot fi amestecate in acelasi script. Extensia originala MySQL nu mai este activ dezvoltata si nu este recomandat pentru proiecte PHP-MySQL noi. Documentatia PHP din lucrarea de laborator utilizeaza MySQLi. In utilitarul XAMPP vor trebui pornite cele doua server: Apache si MySQL 3. Conectare la MySQL Inainte de a putea accesa informatii din baza de date , trebuie creata o conexiune cu serverul MySQL. Pentru a va conecta la un server MySQL cu PHP si MySQLi, se creaza o instanta de obiect mysqli, cu formula new mysqli(), la care se adauga datele de conectare. Sintaxa: $conn = new mysqli($servername, $username, $password, $database, $port); Unde - $servername - Specifica serverul la care sa se conecteze. Daca adaugati valoarea NULL sau un sir gol "", serverul va folosi valoarea standard: "localhost". - $username - Specifica numele de utilizator la baza de date MySQL. - $password - Specifica parola utilizatorului pentru conectare. - $database - Optional. Numele bazei de date care contine tabelele.

Transcript of Laborator 5. PHP si MySQL -...

Page 1: Laborator 5. PHP si MySQL - hera.utcluj.rohera.utcluj.ro/comertelectronic/wp-content/uploads/2017/10/... · 1. Introducere MySQL este cea mai populara aplicatie open-source de baze

Laborator 5. PHP si MySQL

1. Introducere

MySQL este cea mai populara aplicatie open-source de baze de date folosita cu PHP.

O baza de date de obicei contine una sau mai multe tabele, folosita pentru a stoca informatii

pe categori. Tabelele contin coloane si inregistrari (randuri) cu date.

Reguli de sintaxa MySQL

Fiecare baza de date si fiecare tabela este indentificata printr-un nume. Regulile de

baza MySQL pentru nume de baze de date, tabele, si coloane sunt:

Numele poate avea maxim 64 de caractere.

Poate contine numai litere, numere, si sublinia (indicat fara spatii).

Numele poate incepe cu un numar, dar nu poate contine numai numere.

tabela nu poate avea doua coloane cu acelasi nume si o baza de date nu poate

avea doua tabele cu acelasi nume.

Numele tabelelor si coloanelor sunt case-sensitive ("Php" e diferit de "php").

Cand se creaza un tabel in MySQL, trebuie definit tipul de date pe care fiecare

coloana il va contine. Exista trei tipuri principale: Text (strings), Numere, Data si Ora; si doua

tipuri secundare: Liste predefinite si Date binare.

Tipul de date dicteaza ce informatie poate fi stocata si cum, acesta influenteaza si

performanta generala a bazei de date.

2. PHP MySQL – utilizare MySQLi

PHP are trei moduri diferite prin care se poate conecta si interactiona cu baza de date

MySQL : extensia MySQL originala (cu functii), MySQL Improved (MySQLi, obiect-

orientat), sau PHP Data Objects (PDO, obiect-orientat).

Ele nu pot fi amestecate in acelasi script. Extensia originala MySQL nu mai este activ

dezvoltata si nu este recomandat pentru proiecte PHP-MySQL noi.

Documentatia PHP din lucrarea de laborator utilizeaza MySQLi.

In utilitarul XAMPP vor trebui pornite cele doua server: Apache si MySQL

3. Conectare la MySQL

Inainte de a putea accesa informatii din baza de date , trebuie creata o conexiune cu

serverul MySQL.

Pentru a va conecta la un server MySQL cu PHP si MySQLi, se creaza o instanta de

obiect mysqli, cu formula new mysqli(), la care se adauga datele de conectare.

Sintaxa: $conn = new mysqli($servername, $username, $password, $database, $port);

Unde

- $servername - Specifica serverul la care sa se conecteze. Daca adaugati valoarea

NULL sau un sir gol "", serverul va folosi valoarea standard: "localhost".

- $username - Specifica numele de utilizator la baza de date MySQL.

- $password - Specifica parola utilizatorului pentru conectare.

- $database - Optional. Numele bazei de date care contine tabelele.

Page 2: Laborator 5. PHP si MySQL - hera.utcluj.rohera.utcluj.ro/comertelectronic/wp-content/uploads/2017/10/... · 1. Introducere MySQL este cea mai populara aplicatie open-source de baze

- $port - Optional. Specifica port-ul prin care se face conectarea la serverul MySQL,

standard este 3306

Exemplul1 <?php

// conectare la server

$conn = @new mysqli('localhost', 'root', 'a');

// verifica conexiunea

if (mysqli_connect_errno()) {

exit('Conectare nereusita: '. mysqli_connect_error());

}

else echo 'Conectare reusita';

?>

4. Inchiderea unei conexiuni

Conexiunea va fi inchisa automat cand scriptul se termina. Se recomanda totusi sa

inchideti conexiunea mai devreme, cand scriptul nu o mai foloseste. Acest lucru va elibera

memoria folosita de conexiune. Pentru a inchide o conexiune se foloseste metoda close() din

clasa MySQLi.

Exemplul2 <?php

// conectare la server

$conn = @new mysqli('localhost', 'root', '');

// verifica conexiunea

if (mysqli_connect_errno()) {

exit('Conectare nereusita: '. mysqli_connect_error());

}

else echo 'Conectare reusita';

// ceva cod

$conn->close(); // termina conectarea

echo '</br> Conexiune inchisa'

// alt cod PHP

?>

5. Creare baza de date cu MySQLi

Pentru a stoca informatii in MySQL, este nevoie de o baza de date.

Comanda CREATE DATABASE este folosita pentru a crea o baza de date in MySQL.

- Sintaxa: CREATE DATABASE database_name

Pentru a face un script PHP sa execute instructiunile SQL, mai intai trebuie sa creati o

instanta de obiect mysqli, care va contine conexiunea la server, apoi folositi metoda query()

din clasa MySQLi.

- Sintaxa: mysqliObj->query($sql_query)

unde:

- mysqliObj - este instanta de obiect mysqli, creata cu new mysqli()

Page 3: Laborator 5. PHP si MySQL - hera.utcluj.rohera.utcluj.ro/comertelectronic/wp-content/uploads/2017/10/... · 1. Introducere MySQL este cea mai populara aplicatie open-source de baze

- $sql_query - este un sir cu instructiuni SQL.

Aceasta metoda trimite interogarea sau comanda la serverul MySQL, va returna obiectul

rezultat, sau TRUE la succes, FALSE in caz de eroare.

Exemplul urmator creaza o baza de date numita "tests":

Exemplul3 <?php

// conectare la server

$conn = @new mysqli('localhost', 'root', '');

// verifica conexiunea

if (mysqli_connect_errno()) {

exit('Conectare nereusita: '. mysqli_connect_error());

}

else echo 'Conectare reusita';

// interogare sql cu CREATE DATABASE

$sql = "CREATE DATABASE `tests` DEFAULT CHARACTER SET utf8 COLLATE

utf8_general_ci";

// executa interogarea $sql pe server pentru a crea baza de date

if ($conn->query($sql) === TRUE) {

echo '</br> Baza de date "tests" a fost creata';

}

else {

echo 'Error: '. $conn->error;

}

$conn->close();

?>

Cand doriti sa creati o noua baza de date, se adauga doar primele trei argumente la obiectul mysqli (servername, username si password). Dar daca vreti sa folosesti un port specific, adaugati un sir gol "" pentru argumentul ce reprezinta numele bazei de date :

Exemplu: new mysqli('localhost', 'root', 'pass', '', port) Instructiunea suplimentara: DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

seteaza baza de date sa foloseasca UTF-8 charset pentru codarea caracterelor. Exemplul de mai sus creaza o baza de date numita "test", afisaza "Baza de date "tests" a fost creata", sau un mesaj de eroare in caz de esec. $conn->error (sau poate fi folosit mysqli_error($conn) ) returneaza un sir cu o descriere a ultimei erori(daca exista).

6. Creare tabel in MySQL

Dupa ce ati realizat o conexiune la o baza de date, puteti crea tabele in ea. Tabelele sunt elementele care stocheaza datele in baza de date. Pentru a crea un tabel in MySQL, se foloseste comanda CREATE TABLE, apoi se apeleaza metoda query(). - Sintaxa:

CREATE TABLE `table_name`

(

`nume_coloana1` tip_date,

`nume_coloana2` tip_date,

`nume_coloana3` tip_date,

Page 4: Laborator 5. PHP si MySQL - hera.utcluj.rohera.utcluj.ro/comertelectronic/wp-content/uploads/2017/10/... · 1. Introducere MySQL este cea mai populara aplicatie open-source de baze

....

)

- tip_date specifica tipul de date pe care o coloana le poate contine. Pentru o lista cu tipurile de date MySQL, vedeti lectia precedenta: PHP MySQL - Introducere si Tipuri de date. Dupa "tip_date", se pot specifica si alte atribute optionale pentru fiecare coloana:

NOT NULL - Fiecare rand trebuie sa contina o valoare in acea coloana, valorile null nu sunt permise.

DEFAULT value - Seteaza o valoare initiala care este adaugata cand nici o alta valoare nu este transferata

UNSIGNED - Poate fi folosit pentru numere, seteaza sa fie folosite doar numere pozitive si zero.

AUTO INCREMENT - MySQL va mari automat valoarea din randul urmator cu 1 de fiecare data cand o noua inregistrare este adaugata.

PRIMARY KEY - Este folosit pentru a identifica unic randurile dintr-un tabel. Coloana cu setarea PRIMARY KEY este de obicei un ID numeric, si in general folosita cu AUTO_INCREMENT

Fiecare tabel ar trebui sa aiba o coloana primary key. Valoarea ei trebuie sa fie unica pentru fiecare inregistrare din tabel.

Exemplul4 <?php

// conectare la server

$conn = @new mysqli('localhost', 'root', '', 'tests');

// verifica conexiunea

if (mysqli_connect_errno()) {

exit('Conectare nereusita: '. mysqli_connect_error());

}

else echo 'Conectare reusita';

// interogare sql pentru CREATE TABLE

$sql = "CREATE TABLE `users` (

`id` INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,

`name` VARCHAR(25) NOT NULL,

`pass` VARCHAR(18) NOT NULL,

`email` VARCHAR(45),

`reg_date` TIMESTAMP

) CHARACTER SET utf8 COLLATE utf8_general_ci";

// Executa interogarea $sql query pe server pentru a crea tabelul

if ($conn->query($sql) === TRUE) {

echo '</br> Table "users" successfully created';

}

else {

echo 'Error: '. $conn->error;

}

$conn->close();

?>

Acest cod va crea un tabel numic "users" in baza de date "tests", cu cinci coloane (id , name , pass , email si reg_date), seteaza coloana 'id' ca campul primary key.

In imaginea de mai jos puteti vedea descrierea tabelului "users".

Page 5: Laborator 5. PHP si MySQL - hera.utcluj.rohera.utcluj.ro/comertelectronic/wp-content/uploads/2017/10/... · 1. Introducere MySQL este cea mai populara aplicatie open-source de baze

7. INSERT INTO

Dupa ce o baza de date si tabelele ei au fost create, puteti sa adaugati informatii in ele. Cateva reguli de sintaxa:

In PHP, interogarea SQL trebuie sa fie scrisa intre ghilimele.

Valorile de tip String (sir), din interogarea SQL, trebuie sa fie intotdeauna intre

ghilimele.

Valorile numerice si NULL nu trebuie adaugate intre ghilimele.

Introducere date in tabel MySQL

Pentru a adauga inregistrari noi intr-un tabel MySQL, se foloseste comanda INSERT INTO. Exista doua metode prin care o interogare INSERT poate fi scrisa:

1) Prima metoda nu specifica numele coloanelor unde datele for fi introduse, ci doar valorile lor. - Sintaxa:

INSERT INTO nume_tabel

VALUES (valoare1, valoare2, valoare3, ...)

In aceasta metoda, trebuie sa specificati o valoare pentru fiecare coloana, chiar daca este NULL. Daca sunt cinci coloane in tabel, trebuie sa adaugati cinci valori, separate prin virgula.

2) Pentru a doua metoda se specifica atat numele coloanei /coloanelor cat si valorile care

vor fi intoduse: - Sintaxa:

INSERT INTO nume_tabel (coloana1, coloana2, coloana3,...)

VALUES (valoare1, valoare2, valoare3,...)

Aceasta este in general metoda preferata, deoarece puteti adauga doar coloanele care vor primi valori. Orice coloana caruia nu ii este atribuita o valoare va fi tratata ca NULL (sau ii va fi data valoarea default, daca aceasta este definita).

Daca o coloana nu poate avea valoarea NULL (a fost definita ca NOT NULL) si nu are o valoare default, nespecificand o valoare va genera eroare.

Daca o coloana este AUTO_INCREMENT sau TIMESTAMP, nu este nevoie sa fie specificata in interogarea SQL, serverul MySQL va seta si adauga valoarea automat.

Pentru ca PHP sa execute comenzile SQL, trebuie sa folosesti metoda mysqli query() . Urmatorul exemplu adauga o noua inregistrare in tabelul "users" . Acest exemplu

foloseste tabelul "users" creat in lectia anterioara, cu cinci coloane (id , name , pass , email si reg_date).

Page 6: Laborator 5. PHP si MySQL - hera.utcluj.rohera.utcluj.ro/comertelectronic/wp-content/uploads/2017/10/... · 1. Introducere MySQL este cea mai populara aplicatie open-source de baze

Campul "id" este AUTO_INCREMENT, deci nu trebuie specificat in interogarea SQL, serverul MySQL va adauga automat valoare pentru el. La fel si pentru "reg_date", care este setat TIMESTAMP.

Exemplul5 <?php

// conectare la server

$conn = @new mysqli('localhost', 'root', '', 'tests');

// verifica conexiunea

if (mysqli_connect_errno()) {

exit('Conectare nereusita: '. mysqli_connect_error());

}

else echo 'Conectare reusita';

// interogare sql pentru users INSERT INTO

$sql = "INSERT INTO `users` (`name`, `pass`, `email`)

VALUES ('Marius', 'faith', '[email protected]')";

// Trimite interogarea $sql la MySQL pentru a introduce valorile

if ($conn->query($sql) === TRUE) {

echo '</br> Datele au fost adaugate';

}

else {

echo 'Error: '. $conn->error;

}

$conn->close();

?>

Mai intai se creaza instanta de obiect mysql cu identificatorul de variabila $conn. Apoi, se

defineste sirul cu instructiunea SQL, salvat intr-o variabila numita $sql. Apoi se apeleaza metoda query() , si in acelasi timp se verifica valoarea returnata pentru a determina daca datele au fost adaugate.

Exemplul de mai sus adauga un rand in tabelul "users", cu valoarea "Marius" in coloana "name", valoarea "faith" in campul "pass", si "[email protected]" pentru "email". Valorile pentru celelalte coloane ("id" si "reg_date") sunt adaugate automat de serverul MySQL. MySQL permite INSERT cu mai multor randuri in acelasi timp, separate prin virgula. - Sintaxa:

INSERT INTO nume_tabel (coloana1, coloana2, coloana3,...)

VALUES (valoareA1, valoareA2, valoareA3,...),

(valoareB1, valoareB2, valoareB3,...),

(valoareC1, valoareC2, valoareC3,...)

Exemplu urmator adauga doua noi randuri in tabelul "users", cu o singura interogare. Exemplul6 <?php

// conectare la server

$conn = @new mysqli('localhost', 'root', '', 'tests');

// verifica conexiunea

if (mysqli_connect_errno()) {

exit('Conectare nereusita: '. mysqli_connect_error());

}

else echo 'Conectare reusita';

Page 7: Laborator 5. PHP si MySQL - hera.utcluj.rohera.utcluj.ro/comertelectronic/wp-content/uploads/2017/10/... · 1. Introducere MySQL este cea mai populara aplicatie open-source de baze

// interogare sql pentru users, INSERT INTO (doua randuri)

$sql = "INSERT INTO `users` (`name`, `pass`, `email`)

VALUES ('MarPlo', 'peace', '[email protected]'),

('I_AM', 'love', '[email protected]')";

// Trimite interogarea $sql la MySQL pentru a introduce valorile

if ($conn->query($sql) === TRUE) {

echo '</br>Datele au fost adaugate';

}

else {

echo 'Error: '. $conn->error;

}

$conn->close();

?>

Adaugare date din formular in baza de date

Formularele HTML sunt de obicei folosite pentru a trimite date la un script pe server. Aceste date pot fi adaugate si intr-o baza de date.

Pentru a introduce date dintr-un formular intr-o baza de date MySQL, trebuie creat un formular HTML si un script PHP care receptioneaza date din formular.

Exemplu de formular HTML si un script PHP care poate fi folosit pentru a adauga valorile din formular in tabelul "users". Formularul HTML se va salva cu numele „formular.php” <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>

<head>

<title>Formular HTML pentru insert users</title>

</head>

<body>

<form action="insert.php" method="post">

Name: <input type="text" name="name" /><br />

Password: <input type="text" name="pass" /><br />

E-mail: <input type="text" name="email" /><br />

<input type="submit" valoare="Trimite" />

</form>

</body>

</html>

Cand un utilizator apasa pe butonul "Trimite", datele din formular sunt trimise la scriptul din fisierul "insert.php".

Fisierul "insert.php": - preia valorile din formular cu variabila $_POST, - filtreaza aceste valori cu functii strip_tags() si trim() (pentru a sterge posibile tag-uri si spatii goale de la inceput si sfarsit), - foloseste un tipar RegExp si functia preg_match() pentru a verifica daca valoarea de la "email" e o adresa de email corecta,

Page 8: Laborator 5. PHP si MySQL - hera.utcluj.rohera.utcluj.ro/comertelectronic/wp-content/uploads/2017/10/... · 1. Introducere MySQL este cea mai populara aplicatie open-source de baze

- daca toate datele sunt corecte, se face conectarea la o baza de date (cu instanta mysqli), stocheaza valorile intr-un Array asociativ ($adds), si le filtreaza cu metoda mysqli_real_escape_string(), - seteaza comanda INSERT INTO , apoi, metoda query() trimite interogarea SQL la serverul MySQL si o noua inregistrare va fi adaugata in tabelul "users". Cod PHP in pagina "insert.php" <?php

$erors = array(); // seteaza un array gol care va

contine erorile

$regexp_mail = '/^([a-zA-Z0-9]+[a-zA-Z0-9._%-]*@([a-zA-Z0-9-]+\.)+[a-zA-

Z]{2,4})$/'; // RegExp pt adresa de e-mail

// Verifica daca sunt primite date din formular

if (isset($_POST['name']) && isset($_POST['pass']) &&

isset($_POST['email'])) {

// sterge tag-urile si spatiile goale de la inceputul si sfarsitul

valorilor

$_POST = array_map("strip_tags", $_POST);

$_POST = array_map("trim", $_POST);

// verifica daca toate campurile din formular sunt completate corect

// (adresa de email si numarul minim de caractere din "name" si "pass")

if (!preg_match($regexp_mail, $_POST['email'])) $erors[] = 'Adresa de e-

mail incorecta';

if (strlen($_POST['name'])<3) $erors[] = 'Numele trebuie sa contina minim

3 caracte';

if (strlen($_POST['pass'])<6) $erors[] = 'Parola trebuie sa contina minim

6 caracte';

// daca nu sunt erori ($error array gol)

if(count($erors)<1) {

// conecteaza la baza de date "tests"

$conn = new mysqli('localhost', 'root', '', 'tests');

// verifica conexiunea

if (mysqli_connect_errno()) {

exit('Connect failed: '. mysqli_connect_error());

}

// stocheaza valorile intr-un Array, filtrand caracterele speciale pt.

a fi folosite in comanda SQL

$adds['name'] = $conn->real_escape_string($_POST['name']);

$adds['pass'] = $conn->real_escape_string($_POST['pass']);

$adds['email'] = $conn->real_escape_string($_POST['email']);

// interogarea SQL pentru userr, INSERT INTO

$sql = "INSERT INTO `users` (`name`, `pass`, `email`) VALUES ('".

$adds['name']. "', '". $adds['pass']. "', '". $adds['email']. "')";

// Trimite interogarea $sql la MySQL pentru a introduce valorile

if ($conn->query($sql) === TRUE) {

echo 'Datele au fost adaugate';

}

else {

echo 'Error: '. $conn->error;

}

$conn->close();

Page 9: Laborator 5. PHP si MySQL - hera.utcluj.rohera.utcluj.ro/comertelectronic/wp-content/uploads/2017/10/... · 1. Introducere MySQL este cea mai populara aplicatie open-source de baze

}

else {

// altfel, daca au aparut erori erori, le adauga intr-un sir si le

printeaza

echo implode('<br />', $erors);

}

}

else {

echo 'Nu sunt date de la formular';

}

?>

8. PHP MySQL - SELECT, ORDER BY

Cand baza de date are cateva inregistrari in ea, puteti prelua informatia stocata, folosind

comanda SELECT.

O interogare SELECT returneaza randuri selectate de la unul sau mai multe tabele.

- Sintaxa:

SELECT nume_coloana/e FROM nume_tabel

- "nume_coloana/e" - este numele coloanei sau coloanelor care vor fi selectate.

Pentru a selecta mai multe coloane, adaugatile separate prin virgula:

SELECT coloana1, coloana2, coloana3 FROM nume_tabel

Pentru a selecta toate coloanele, punti un asterisc (*):

SELECT * FROM nume_tabel

Ca sa fie trimisa comanda SQL la baza de date MySQL si pentru a prelua datele selectate,

se foloseste metoda query() a obiectului mysqli.

Cand este folosita cu interogari SELECT, aceasta metoda returneaza un obiect care

contine randurile de date, sau False in caz de eroare.

Pentru a parcurge datele returnate si sa obtineti cate un rand din ele, puteti folosi

metoda fetch_assoc.

Metoda fetch_assoc() returneaza un array asociativ ce contine randurile preluate, cheile

din array reprezinta numele coloanelor.

Cu o bucla while() puteti prelua informatiile din fiecare rand stocat in acel array.

Pentru a afla numarul de randuri returnat de o interogare SELECT, se foloseste

proprietatea num_rows, aplicata la obiectul rezultat.

- Urmatorul exemplu selecteza si afiseaza datele stocate in coloanele "id", "name"

si"pass" din tabelul "users".

Exemplul7 <?php

// conecteaza la baza de date "tests"

$conn = new mysqli('localhost', 'root', '', 'tests');

// verifica conexiunea

if (mysqli_connect_errno()) {

exit('Connect failed: '. mysqli_connect_error());

}

Page 10: Laborator 5. PHP si MySQL - hera.utcluj.rohera.utcluj.ro/comertelectronic/wp-content/uploads/2017/10/... · 1. Introducere MySQL este cea mai populara aplicatie open-source de baze

// interogare sql SELECT

$sql = "SELECT `id`, `name`, `pass` FROM `users`";

// executa interogarea si retine datele returnate

$result = $conn->query($sql);

// daca $result contine cel putin un rand

if ($result->num_rows > 0) {

// afiseaza datele din fiecare rand din $result

while($row = $result->fetch_assoc()) {

echo '<br /> id: '. $row['id']. ' - name: '. $row['name']. ' - pass: '.

$row['pass'];

}

}

else {

echo '0 rezultate';

}

$conn->close();

?>

Optiunea LIMIT

Cu optiunea LIMIT puteti sa determinati numarul de inregistrari pe care MySQL le va returna: - Sintaxa:

SELECT nume_coloana/e FROM nume_tabel LIMIT skip_nr, ret_nr

"skip_nr" este optional, ii spune bazei de date cate randuri sa sara din rezultate.

"ret_nr" seteaza numarul maxim de inregistrari ce vor fi returnate.

Exemplul8 <?php

// conecteaza la baza de date "tests"

$conn = new mysqli('localhost', 'root', '', 'tests');

// verifica conexiunea

if (mysqli_connect_errno()) {

exit('Connect failed: '. mysqli_connect_error());

}

// interogare sql SELECT

$sql = "SELECT `id`, `name`, `pass` FROM `users` LIMIT 2";

// executa interogarea si retine datele returnate

$result = $conn->query($sql);

// daca $result contine cel putin un rand

if ($result->num_rows > 0) {

// afiseaza datele din fiecare rand din $result

while($row = $result->fetch_assoc()) {

echo '<br /> id: '. $row['id']. ' - name: '. $row['name']. ' - pass: '.

$row['pass'];

}

}

else {

echo '0 rezultate';

}

Page 11: Laborator 5. PHP si MySQL - hera.utcluj.rohera.utcluj.ro/comertelectronic/wp-content/uploads/2017/10/... · 1. Introducere MySQL este cea mai populara aplicatie open-source de baze

$conn->close();

?>

ORDER BY

ORDER BY specifica ordinea de sortare a resultatelor.

- Sintaxa:

SELECT nume_coloana/e FROM nume_tabel ORDER BY nume_col

ASC|DESC

"nume_col" poate fi o singura coloana, o lista de coloane separate prin virgula, sau o

expresie ca RAND(), pentru a obtine o ordine aleatorie.

Cand se ordoneaza dupa mai mult de o coloana, a doua coloana e folosita in sortare doar

daca valorile din prima coloana sunt egale.

Ordinea de sortare standard este ascendenta (ASC) (a–z, 0–9), iar optiunea ASC poate fi

omisa. DESC (descrescator) inverseaza ordinea.

Exemplul9 <?php

// conecteaza la baza de date "tests"

$conn = new mysqli('localhost', 'root', '', 'tests');

// verifica conexiunea

if (mysqli_connect_errno()) {

exit('Connect failed: '. mysqli_connect_error());

}

// interogarea sql SELECT

$sql = "SELECT `id`, `name`, `pass` FROM `users` ORDER BY `name`";

// executa interogarea si retine rezultatul

$result = $conn->query($sql);

// daca $result contine cel putin un rand

if ($result->num_rows > 0) {

// afiseaza datele din fiecare rand din $result

while($row = $result->fetch_assoc()) {

echo '<br /> id: '. $row['id']. ' - name: '. $row['name']. ' - pass: '.

$row['pass'];

}

}

else {

echo '0 results';

}

$conn->close();

?>

9. PHP MySQL - WHERE si LIKE

Utilizare WHERE si operatori pentru a cauta valori specifice

Pentru a cauta valori specifice, pentru a extrage doar acele inregistrari care respecta anumite criterii, se adauga o clauza WHERE in interogarea SELECT.

Page 12: Laborator 5. PHP si MySQL - hera.utcluj.rohera.utcluj.ro/comertelectronic/wp-content/uploads/2017/10/... · 1. Introducere MySQL este cea mai populara aplicatie open-source de baze

Clauza WHERE este folosita pentru a filtra inregistrarile. Se adauga dupa numele tabelului.

- Sintaxa:

SELECL nume_coloana/e FROM nume_tabel WHERE conditie

"conditie" - poate fi una sau mai multe expresii conditionale care specifica criteriul de selectare. Aceste expresii conditionale pot folosi operatori de comparatie, aritmetici si logici.

Tabelul urmator prezinta operatorii cei mai des folositi cu WHERE in instructiunile MySQL:

Exemplul10 (selecteaza toate randurile din tabelul "users" care au "name=Marius" si

afiseaza "id" si "email" din ele): <?php

// conectare la baza de date "tests"

$conn = new mysqli('localhost', 'root', '', 'tests');

// verifica conexiunea

if (mysqli_connect_errno()) {

exit('Connect failed: '. mysqli_connect_error());

}

$name = 'Marius'; // seteaza numele intr-o variabila

// Interogare sql SELECT

$sql = "SELECT `id`, `email` FROM `users` WHERE `name`='$name'";

// executa interogarea si retine rezultatele

$result = $conn->query($sql);

// daca $result contine cel putin un rand

if ($result->num_rows > 0) {

// afisaza datele pentru fiecare rand din $result

while($row = $result->fetch_assoc()) {

echo '<br /> id: '. $row['id']. ' - email: '. $row['email'];

}

}

else {

Page 13: Laborator 5. PHP si MySQL - hera.utcluj.rohera.utcluj.ro/comertelectronic/wp-content/uploads/2017/10/... · 1. Introducere MySQL este cea mai populara aplicatie open-source de baze

echo '0 results';

}

$conn->close();

?>

• Clauza WHERE poate fi folosita si cu optiunile ORDER BY si LIMIT pentru a ordona si

limita datele selectate.

Exemplu: $sql = "SELECT `name`, `pass` FROM `users` WHERE `id`>2 ORDER BY `name`

LIMIT 2";

• In instructiunile SQL se pot adauga si expresii cu calcule matematice, folosind

caracterele adunare (+), scadere (-), inmultire (*), impartire (/), si procent (%).

Exemplu: $sql = "SELECT `name`, `pass` FROM `users` WHERE `id`=($x + $y)";

10. PHP MySQL - UPDATE

Dupa ce ati adaugat randuri in tabelul MySQL, puteti sa modificati datele inregistrate,

folosind comanda UPDATE.

Instructiunea UPDATE este folosita pentru a modifica sau actualiza informatiile

existente intr-un tabel.

- Sintaxa:

UPDATE nume_tabel

SET coloana1=valoare, coloana2=valoare2, ...

WHERE o_coloana=o_valoare

- Clauza WHERE este importanta intr-o interogare UPDATE , specifica serverului

MySQL care inregistrare sau inregistrari trebuie actualizate. Daca omiteti clauza WHERE, vor

fi afectate toate randurile!

- Comanda UPDATE este trimisa la serverul MySQL cu metoda query() a obiectului

mysqli.

Exemplul11 In acest exemplu vom modifica adresa de email pentru utilizatorul cu

"name" Marius <?php

// conecteaza la baza de date "tests"

$conn = new mysqli('localhost', 'root', '', 'tests');

// verifica conexiunea

if (mysqli_connect_errno()) {

exit('Connect failed: '. mysqli_connect_error());

}

// interogare sql UPDATE

$sql = "UPDATE `users` SET `email`='[email protected]' WHERE

`name`='Marius' AND `id`=1";

// executa interogarea si verifica pentru erori

if (!$conn->query($sql)) {

echo 'Error: '. $conn->error;

}

Page 14: Laborator 5. PHP si MySQL - hera.utcluj.rohera.utcluj.ro/comertelectronic/wp-content/uploads/2017/10/... · 1. Introducere MySQL este cea mai populara aplicatie open-source de baze

$conn->close();

?>

11. PHP MySQL - DELETE

Comanda DELETE este folosita pentru a sterge randuri din tabel.

- Sintaxa:

DELETE FROM nume_tabel WHERE conditie

Clauza WHERE conditie este foarte importanta, ea specifica exact care rand sau

randuri trebuie sterse. Este important sa o folositi, deoarece randurile sterse nu mai pot fi

recuperate, decat daca aveti undeva salvata baza de date.

Daca nu adaugati WHERE, serverul MySQL va sterge toate inregistrarile din tabel,

lasandu-l gol.

Instructiunea DELETE este trimisa la serverul MySQL cu metoda query() a obiectului

mysqli.

- Exemplul12 In acest exemplu vom sterge inregistrarile din tabel, care au

name='Marius'

<?php

// Conecteaza la baza de date "tests"

$conn = new mysqli('localhost', 'root', '', 'tests');

// verifica conexiunea

if (mysqli_connect_errno()) {

exit('Connect failed: '. mysqli_connect_error());

}

// interogare DELETE

$sql = "DELETE FROM `users` WHERE `name`='Marius'";

// executa interogarea si verifica daca exista erori

if (!$conn->query($sql)) {

echo 'Error: '. $conn->error;

}

$conn->close();

?>

• Pentru a sterge complet un tabel, se foloseste DROP TABLE:

DROP TABLE nume_tabel

• Pentru a sterge o intreaga baza de date, cu toate tabelele si informatiile din ea, se

foloseste DROP DATABASE:

DROP DATABASE database_name