PHP şi MySQL
Bazele de date sunt colecţii de date, aranjate într-o anumită formă Operaţii : - Crearea bazei de date; - Conectarea la baza de date; - Inserarea datelor in baza de date; - Ștergerea datelor din baza de date; - Modificarea datelor; - Afișarea datelor
Administrarea sistemului MySQL se poate face fie din linia de comandă, fie folosind aplicaţia PHPMyAdmin. localhost/phpmyadmin/
Comenzile uzuale folosite în general atât în MySQL cât și în celelalte SGBD-uri sunt: - CREATE creează o bază de date şi/sau un tabel - DROP - şterge o bază de date şi/sau un tabel - INSERT adaugă înregistrări(linii) într-un tabel - DELETE - şterge înregistrări(linii) într-un tabel - UPDATE modifică înregistrările dintr-un tabel - SELECT selectează înregistrările dintr-un tabel - ALTER - modifică structura unui tabel după ce acesta a fost creat cu instrucțiunea CREATE TABLE
Tipuri de date folosite în MySQL(o parte din ele): - Int număr întreg - Char secţiune cu lungime fixă de max. 255 caractere - Varchar secţiune variabilă de max 255 caractere - Float număr real mic - Double număr real mare - Text şir de maxim 65535 caractere - Date data in format an-luna-zi - Time ora in format oră-minut-secundă
Crearea unei baze de date MySQL şi a unui tabel CREATE DATABASE nume_db; USE nume_db; CREATE TABLE tabel (câmp1 tip1, câmp2 tip2, ); Ex. CREATE TABLE carte (carteid CHAR(10), titlu VARCHAR(255), pret decimal(5,2));
- atribute opţionale ale unui câmp: NOT NULL - Fiecare rând trebuie sa conţină o valoare a coloanei asociate; valorile nule nu sunt permise. DEFAULT valoare - Dacă nu este dată o valoare a coloanei asociate, se va presupune valoarea specificată. AUTO INCREMENT - MySQL va repartiza în mod automat un număr de serie ca valoare a coloanei asociate. PRIMARY KEY - Coloana asociată este cheia primară a tabelului care o conţine. Ex. CREATE TABLE carte (carteid CHAR(10) PRIMARY KEY, titlu VARCHAR(255) NOT NULL, pret DECIMAL(5,2) DEFAULT 50.00);
Accesul la datele dintr-o bază de date, interogările SQL SELECT * FROM tabel; SELECT coloana1, coloana2 FROM tabel [WHERE cond]; INSERT INTO tabel VALUES (valoare1, valoare2); INSERT INTO tabel (coloana1, coloana2) VALUES (valoare1, valoare2); UPDATE tabel SET coloana1=valoare1, coloana2=valoare2 WHERE conditie; DELETE FROM tabel WHERE conditie; Sortarea şi gruparea ORDER BY valoare GROUP BY coloana-sortare HAVING conditie
Utilizarea bazelor de date folosind PHP Conectarea la serverul MySQL Pentru conectarea la un server MySQL cu PHP si MySQLi, se crează o instanță de obiect mysqli, cu new mysqli(), la care se adaugă datele de conectare. $conn=new mysqli_connect($nume_gazda, $nume_utilizator, $parola, $bazadate, $port) ; (port implicit: 3306, altfel localhost:port ) Incheierea conexiunii: mysqli_close();
Ex. <?php $conn = mysqli_connect( "localhost", "root", "") if (!$conn) { exit("eroare la conectare ". mysqli_connect_error($conn)); } // Aici adaugati datele necesare lucrului cu serverul MySQL mysqli_close($conn);?>
Creare baza de date CREATE DATABASE nume_bd Pentru a face un script PHP să execute instrucțiunile SQL, mai intâi trebuie creată o instanță de obiect mysqli, care va conține conexiunea la server, apoi se folosește metoda query() din clasa MySQLi. mysqliobj->query($sql_query) - mysqliobj - este instanță de obiect mysqli, creată cu new mysqli() - $sql_query - este un șir cu instructiuni SQL. Această metodă trimite interogarea sau comanda la serverul MySQL, va returna obiectul rezultat, sau TRUE la succes, FALSE in caz de eroare.
$createdb = mysqli_query($conn,"create DATABASE test"); if ($createdb) echo "Baza de date test a fost creata <br />"; else echo "<br />". mysqli_errno($conn). " : ". mysqli_error($conn);
Crearea tabelelor CREATE TABLE numetabel (coloana1, coloana2,...); CREATE TABLE `table_name` ( `nume_coloana1` tip_date, `nume_coloana2` tip_date, `nume_coloana3` tip_date,... )
Determinarea tabelelor incluse într-o bază de date MySQL SHOW TABLES FROM nume_bd ; Adăugarea de date in tabel INSERT INTO 'nume_tabel' (coloana1, coloana2,...) VALUES ('date1', 'date2',...) ; Adaugare.php adaug.php mysqli_insert_id(), returnează valoarea lui AUTO_INCREMENT pentru ultima operaţie INSERT $conn->insert_id test_id.php
Interogări mysqli_query("interogare") mysqli_query("interogare", "id_con") "interogare" este un şir ce conţine comenzile SQL care urmează a fi executate (in PHP, comenzile SQL nu trebuie să se încheie cu un caracter punct şi virgula) "id_con" este identificatorul de conectare returnat de funcţia mysql_connect(), dacă acesta este omis se foloseşte ultima legatură deschisă cu această funcţie. $conn->query($sql) metoda returnează un obiect care conține rândurile de date sau False in caz de eroare
Prelucrarea rezultatelor interogărilor SELECT mysql_fetch_assoc() (sau mysql_fetch_array() cu parametru "MYSQL_ASSOC"). - sunt similare, adaugă datele intr-o matrice unde pentru fiecare element avem chei cu numele coloanelor, iar valorile lor sunt datele din rândul respectiv. mysql_fetch_row() - adaugă datele intr-o matrice asociativă unde pentru fiecare element avem chei cu numere consecutive (începând de la 0) care reprezintă ordinea coloanelor, iar valorile lor sunt datele din rândul respectiv mysql_fetch_object() - aduce rezultatele rândului sub forma de obiect cu perechile $rand->coloana
Parcurgerea rândurilor unui set de rezultate: 1. Se verifică dacă numărul de rânduri returnat este 0 folosind funcţia mysql_num_rows(), transferându-i ca argument valoarea returnată de funcţia mysql_query() 2. Dacă numărul de rânduri este 0 înseamnă că interogarea SELECT nu a returnat nici un rând din tabel 3. Dacă numărul de rânduri este diferit de 0, se execută o instrucţiune WHILE împreună cu una din funcţiile: mysql_fetch_assoc() (sau mysql_fetch_array() cu parametru "MYSQL_ASSOC") 4. Prelucrarea coloanele stocate în matrice, depinde de funcţia folosită - pentru mysql_fetch_assoc() (sau mysql_fetch_array()) puteţi folosi o sintaxă de genul $rand['coloana'] - pentru mysql_fetch_row() - o instrucţiune "foreach - pentru mysql_fetch_object() puteţi folosi sintaxa $rand->'coloana' Aceste funcții returnează FALSE daca nu mai există rânduri în setul de rezultate
-aflarea datelor din anumite coloane <?php $conn = new mysqli('localhost', 'root', '', 'tests'); $sql = "SELECT `id`, `name`, `pass` FROM `users`"; $result = $conn->query($sql); if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { echo '<br /> id: '. $row['id']. ' - name: '. $row['name']. ' - pass: '. $row['pass']; } } else { echo '0 rezultate'; } $conn->close();?> $result->fetch_assoc(), $result->num_rows test_rand.php
- Afişarea tuturor inregistrărilor <?php $interogare = "SELECT * FROM `carti`"; $rezultat = mysql_query($interogare); if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />"; } if (mysql_num_rows($rezultat) == 0) { echo '0 rezultate'; } else { while ($rand = mysql_fetch_row($rezultat)) { foreach ($rand as $coloana) { echo " $coloana "; } echo "<br />"; } }?>
Actualizare UPDATE nume_table SET col1=val1,col2=val2, WHERE o_col=o_val comanda UPDATE este trimisă serverului MySQL cu metoda query() a obiectului mysqli test_update.php
DELETE DELETE from nume_table WHERE conditie Instrucțiunea DELETE este trimisă la serverul MySQL cu metoda query() a obiectului mysqli. test_delete.php Pentru a șterge complet un tabel, se folosește DROP TABLE: DROP TABLE nume_table Pentru a șterge o intreagă baza de date, cu toate tabelele și informațiile din ea, se folosește DROP DATABASE: DROP DATABASE database_name
Aplicație Realizarea unui formular de prelucrare a datelor, introducerea informațiilor in baza de date și vizualizarea acestora Problema: Formularul va avea următoarele câmpuri: nume (tipul text), prenume (tipul text), vârsta (tipul text), email (tipul text) și comentariu (textarea). Cerința: Toate câmpurile sunt obligatorii, câmpurile nume și prenume trebuie să conțină numai litere, câmpul vârsta să conțină numai cifre, iar in câmpul comentariu să aibe maxim 255 caractere.
Rezolvare: Crearea bazei de date folosind phpmyadmin. baza de date - formular și tabela - intrari având 6 câmpuri : id nume prenume varsta email comentariu ID de tip INT, auto_increment, primary nume CHAR(60), prenume CHAR(60), varsta CHAR(10), email CHAR(100), comentariu CHAR(255).