Tutorial MySql
Tutorial MySql
Aplicatiile Web sunt prezentul si viitorul. Orice limbaj de programare ai fi facut in trecut,
sau daca stii numai HTML, CV-ul tau va fi vazut altfel cu experienta in dezvoltarea
aplicatiilor Web.
La nivel cel mai de jos World Wide Web-ul se bazeaza pe o arhitecura client/server. Asta
insemna ca si severul central dar si aplicatia-client sunt responsabile de o parte din
procesarea datelor.
Clientul
Aplicatiile care se pot dezvolta folosind MySQL si PHP folosesc un singur client:
browser-ul Web. Unele aplicatii mai sofisticate pot folosi si un applet Java (spre exemplu
un client de chat in timp real). Singurul client de care trebuie sa fii preocupat este
browser-ul care va interpreta aplicatiile tale.
Server-ul
Aproape tot ce fac aplicatiile Web are loc pe un server. O aplicatie specifica, numita
server Web, va fi responsabila pentru comunicarea cu browser-ul. In cele din urma, mai
este nevoie de un limbaj care sa intermedieze cereri intre server-ul web si un server de
baze de date, in cazul nostru si sa realizeze sarcini prin program asupra informatiilor ce
vin si se duc spre sever-ul Web. Toate aceste trei elemente (server-ul Web, limbajul de
programare si serverul de baze de date) trebuie sa fie compatibile si cu sistemul de
operare din calculatorul pe care sunt folosite. Cele mai folosite sisteme de operare pe
serverele Web sunt Windows NT/2000 si UNIX (peste 90% din numarul total de servere
de pe Web).
Ce ar trebui sa folosesti pentru aplicatii Web ?
Ei bine, foarte pe scurt PHP si MySQL sunt produse gratuite, spre deosebire de celelate
optiuni gratuitatea nu inseamna ca nu au aceleasi performante ca sistemele de mii de
dolari. Windows NT sau Windows 2000 este o buna alegere, dar poti folosi MySQL si
PHP si pe Windows 95/98/Me. Cu toate acestea, in lumea de afara aproape toate
aplicatiile PHP/MySQL ruleaza pe o versiune de UNIX: Linux, Irix, Solaris, HP-UX..
Server-ul Web
Cele mai folosite servere Web sunt Apache si Microsoft's IIS. Apache este si el gratuit si
in sistem Open Source ca si PHP, MySQL si Linux. El functioneaza bine pe un sistem
UNIX dar si pe un sistem Windows (dar nu pe un server foarte incarcat). Cea mai buna
alegere este realizarea si testarea aplicatiei pe Windows cu Apache, PHP si MySQL si
apoi transferul aplicatiei pe un server Linux fara schimbari in script-uri.
Middleware
PHP face parte din clasa limbajelor middleware (ASP, Perl, ColdFusion etc.). Aceste
limbaje lucreaza cu serverul Web pentru a interpreta cererile facute din dinspre World
Wide Web, proceseaz aceste cereri, interactioneaza cu alte programe pe server pentru a
indeplini cererile si va indica, apoi, server-ului exact ceea ce trebuie servit browser-ului
clientului. Limbajul middleware va fi folosit pentru marea majoritate din munca ta.
O tranzactie normala cu baza de date Web se constituie din urmatorii pasi (numerotati
in figura):
1. Browser-ul unui utilizator face o cerere HTTP pentru o anumita pagina (spre
exemplu se cauta o anumita carte un site prin intermediul fisierului [Link]).
2. Server-ul Web primeste cererea pentru [Link], cauta fisierul si il paseaza
motorului PHP pentru a fi procesat.
3. Motorul PHP incepe procesarea si gaseste o comanda de conectare la o baza de
date si o interogare dupa un anumit criteriu. PHP deschide o conexiune cu server-
ul MySQL si ii trimite interogarea.
4. Server-ul MySQL primeste interogarea si o proceseaza si trimite rezultatul (o lista
de carti, in cazul nostru) PHP-ului.
5. PHP-ul termina de rulat script-ul (de obicei are loc o formatare a rezultatelor
interogarii in HTML) si returneaza fisierul HTML rezultat server-ului Web
6. Server-ul Web trimite HTML-ul inapoi catre browser de unde utilizatorul poate
vedea lista cartilor pe care le-a cerut.
Ce este MySQL ?
MySQL este un server SQL pentru baze de date foarte robust, rapid, multi-utilizator,
multi-thread.
Tabele
Tabela are un nume, un numar de coloane corespunzatoare tipurilor de informatii si linii
corespunzatoare inregistrarilor din tabele. De exemplu:
CLIENTI
ID Nume Adresa Oras
1 Julie Smith 25 Oak Street London
2 Alan Wong 47 Haines Avenue New York
3 Michelle Arthur 357 North Road Chicago
Coloanele au un nume unic si contin informatii diferite. Fiecare are un tip de date asociat
(de exemplu, integer pentru 'ID' si string pentru 'Nume', 'Adresa' si 'Oras'). Coloanele mai
sunt numite campuri sau atribute.
Liniile reprezinta cate un client diferit in tabela noastra. Mai sunt numite inregistrari sau
tupluri.
Valorile specificate la intersectia coloanelor cu liniile trebuie sa aiba tipul de date
corespunzator.
Cheile reprezinta o cale de a identifica fiecare inregistrare in parte. Baze de date care au
mai multe tabele folosesc o cheie primara sau o cheie externa(Primary Key sau Foreign
Key ) ca referinta de la o tabela la alta.
Daca adaugam o noua tabela cu comezile facute de clienti, putem face legatura intre cele
doua tabele pe baza campului comun 'ID' care este PK in tabela 'clienti' si FK in
'comenzi':
COMENZI
ComID ID Cantitate
1 3 30.66
2 1 23.00
3 2 5.00
4 4 40.87
Relatii
Exista 3 tipuri de relatii intr-o BD relationala:
Relatie una-la-una - Exista cate una/unul din fiecare in relatie (dcaca am fi pus
adresele intr-o tabela separata intre CLIENTI si ADRESE ar fi existat un
corespondent pentru fiecare inregistrare).
Relatie una-la-mai-multe - O linie dintr-o tabela e legata la mai multe linii din alta
tabela (un client ar putea face mai multe comenzi).
Relatie mai-multe-la-mai-multe - Mai multe linii din tabela 1 sunt legate la mai
multe din tabela 2 (de exemplu, in cazul a doua tabele, CARTI si AUTORI, o
carte ar putea fi scrisa de doi coautori, fiecare dintre ei mai avand si alte carit
scrise).
Instalare pe Windows
Instalarea e acum completa. Pentru a testa daca MySQL merge incepe o sesiune MS-DOS
(in casuta Start menu-Run tasteaza command) in directorul c:\mysql\bin si scrie
urmatoarea comanda:
mysqld-shareware --standalone
Se va porni serverul MySQL. Tasteaza mysql si promptul se va schimba in mysql.
Tasteaza show databases si ar trebui sa obtii urmatorul rezultat:
+----------------+
| Database |
+----------------+
| mysql |
| test |
+----------------+
2 rows in set (0.00 sec)
Acum vei adauga o parola pentru utilizatorul root in locul utilizatorului anonim care
poate fi folosit de oricine:
Windows 95/98
Versiunea de MySQL pentru Windows 95/98 are doua versiuni de servere: mysqld si
mysqld-opt, optimizat pentru procesoare Pentium. Poti starta serverul cu comanda:
C:\mysql\bin\mysqld-opt
si-l poti opri cu comanda:
C:\mysql\bin\mysqladmin -u root shutdown
Windows NT/Win2000
Serviciul e instalat cu numele MySQL si trebuie pornit din Services Control Manager
(SCM) Utility din Control Panel. Poti configura serverul MySQL sa relueze ca serviciu
prin:
C:\mysql\bin\mysqld-nt -install
Acum poti porni/opri serviciu cu:
NET START mysql M
NET STOP mysql
Daca nu vrei sa rulezi MySQL ca serviciu, il poti porni cu comanda:
C:\> C:\mysql\bin\mysqld-nt --standalone
La drum cu PHP...
Copiaza distributia PHP de la [Link] si dezarhiveaza pachetul in directorul 'C:\php4\'.
Din acest director copiaza fisierele [Link] and [Link] in 'c:\windows\
system'. Apoi, redenumeste [Link]-dist in [Link] and muta-l in directorul in care e
instalat Windows-ul ('c:\windows\'). Deschide acest fisier cu Notepad si caua sirul de
caractere "extensio_dir". Schimba valoarea implicita cu 'C:\php4'. Daca ai nevoie de
extensii speciale (de exemplu, pentru grafice) sterge comentariile (caracterul ;) din fatza
randului din [Link] de genul:
;extensions=php_**.dll
Acum ve trebui sa faci legatura intre PHP, Apache si MySQL. Du-te in directorul in care
ai instalat Apache, cauta fisierul '[Link]' din directorul '\conf' si adauga aceste linii:
Pentru a folosi PHP cu Apache, se vor copia toate fisierele *.php in directorul htdocs
din folder-ul /Apache Group/Apache.
Instalare pe Linux
+----------------+
| Database |
+----------------+
| mysql |
| test |
+----------------+
2 rows in set (0.00 sec)
Configurare post-instalare
Pe UNIX PHP e instalat ca o extensie a Apache. Deci instalarea lor se va face simultan.
Incepe prin dezarhivarea pachetelor PHP si Apache.
gunzip apache [Link] tar xf [Link]
Primul lucru pe care trebuie sa-l observi este ca fiecare comanda data server-ului se
termina cu ';'. Fara aceste terminator nu se va intampla nimic. Asta inseamna ca poti avea
linii noi in mijlocul unei comenzi sau poti da mai multe comenzi pe aceeasi linie:
Acest ultim prompt insemna ca MySQL mai asteapta sa fie introdus ceva (asteapta ';').
Daca vrei sa nu mai executi o comanda pe care ai scris-o partial, o poti anula cu '\c':
mysql> SELECT
-> USER()
-> \c
mysql>
Ce insemna prompt-urile
Este important de stiut ce inseamna prompt-urile '> and "> , deoarece daca din
greseala introduci un sir neterminat, orice altceva ce vei tasta (chiar si quit) nu va fi luat
in seama.
Pentru a te conecta la server, de obicei esti nevoit sa dai numele de utilizator si parola:
mysql>
Dupa ce te-ai conectat cu succes la server te poti deconecta cu comanda QUIT sau
apasand CTRL+D
mysql> QUIT
Crearea utilizatorilor
Sistemul de privilegii al MySQL
Una dinte cele mai bune caracteristici ale MySQL este ca suporta un sistem de privilegii
(dreptul de a face o anumita actiune asupra unui obiect) pentru utilizatori foarte sofisticat.
Cand vei crea un utilizator, ii vei da acces la un set de privilegii pentru a specifica ce
anume poate sa faca si ce nu poate sa faca un utilizator. Un utilizator ar trebui sa aiba cel
mai mic nivel de privilegii necesar pentru a-si indeplini sarcina.
Vom crea o baza de date angajati pe care o vom folosi si in alte ocazii:
Pe Windws:
create database angajati;
Sa vedem cate baze de date sunt in sistem:
show databases;
+----------------+
| Database |
+----------------+
| angajati |
| mysql |
| test |
+----------------+
3 rows in set (0.00 sec)
Sub Linux:
Trebuie sa devii superuser si sa tastezi parola de root:
create database angajati;
GRANT ALL ON angajati.* TO marius@localhost IDENTIFIED BY "eagle"
Ultima conanda acorda toate drepturile asupra tabelei angajati utilizatorului Marius.
Iesi cu QUIT si intra din nou cu nume de utilizator de aceasta data:
mysql -u user_name -p
Ar trebui sa apara ca in continuare:
[marius@localhost marius]$ mysql -u marius -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is X to server version: [Link]
mysql>\u angajati;
Pentru baza noastra de date vom avea o tabela cu detalii despre angajati si o tabela cu
date personale. Dupa ce ai selectat baza de date angajati dai urmatoarea comanda:
Tipuri de campuri
Cele trei tipuri de baza pentru campuri sunt: numeric, data si timp si sir de
caractere(string). Cand alegi un anumit tip sau subtip, poti specifica si lungimea maxima
admisa (M, maxim 255).
TIMESTAMP-uri
Type Specified Display
TIMESTAMP YYYYMMDDHHMMSS
TIMESTAMP(14) YYYYMMDDHHMMSS
TIMESTAMP(12) YYMMDDHHMMSS
TIMESTAMP(10) YYMMDDHHMM
TIMESTAMP(8) YYYYMMDD
TIMESTAMP(6) YYMMDD
TIMESTAMP(4) YYMM
TIMESTAMP(2) YY
Tip Interval
[NATIONAL] 1 to 255
CHAR(M) [BINARY]
[NATIONAL] 1 to 255
VARCHAR(M)
[BINARY]
Tipuri TEXT si BLOB
Lungime maxima
Tip (Caractere)
TINYBLOB 28-1
(255)
TINYTEXT 28-1
BLOB 216-1
(65.535)
TEXT 216-1
MEDIUMBLOB 224-1
(16.777.215)
MEDIUMTEXT 224-1
LONGBLOB 232-1
([Link])
LONGTEXT 232-1
Tipuri SET si ENUM
Tip Nr. valori in set Descriere
ENUM(‘valoare1’, 65535 O singura valoare din lista sau NULL
‘valoare2’,...)
SET(‘valoare1’, 64 Un set dintre valorile din lista.
‘valoare2’,...)
Exemplu:
create table _tabela1 (
id int auto_increment primary key,
answer enum (‘da’, ‘nu’) default ‘nu’
);
+--------+------------------+------+-----+---------+------+
| Field | Type | Null | Key | Default | Extra|
+--------+------------------+------+-----+---------+------|
| emp_id | int(10) unsigned | | PRI | 0 | |
| | auto_increment| | | | |
| f_name | varchar(20) | YES | | NULL | |
| l_name | varchar(20) | YES | | NULL | |
| title | varchar(30) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| yos | int(11) | YES | | NULL | |
| salary | int(11) | YES | | NULL | |
| perks | int(11) | YES | | NULL | |
| email | varchar(60) | YES | | NULL | |
+--------+------------------+------+-----+---------+------+
9 rows in set (0.00 sec)
Inserarea inregistrarilor in tabele
Exemplu:
mysql> INSERT INTO angajati_data
-> (f_name, l_name, title, age, yos, salary, perks, email)
-> values
-> ("Manish", "Sharma", "CEO", 28, 4, 200000,
-> 50000, "manish@[Link]");
Query OK, 1 row affected (0.00 sec)
Daca vrei sa inserezi unul dintre urmatoarele caractere intr-un camp de tip text, trebui sa-i
adaugi inainte un caracter backslash(\):
‘ (apostrof) :\'
“ (ghilimele):\"
\ (backslash) :\\
% (procent) :\%
_ (liniuta de subliniere) :\_
Informatiile dorite sunt extrase din tabela (preocesul de interogare) cu comanda SELECT
SELECT nume_campuri from nume_tabela [WHERE ...conditii];
De exemplu, pentru a extrage nume si prenumele tuturor angajatilor (presupunand ca ai
mai adaugat pe parcurs mai multe inregistrari cu INSERT sau LOAD DATA INFILE):
mysql> SELECT f_name, l_name from angajati_data;
+---------+------------+
| f_name | l_name |
+---------+------------+
| Manish | Sharma |
| John | Hagan |
| Ganesh | Pillai |
| Anamika | Pandit |
| Mary | Anchor |
| Fred | Kruger |
| John | MacFarland |
| Edward | Sakamuro |
| Alok | Nanda |
| Hassan | Rajabi |
| Paul | Simon |
| Arthur | Hoopla |
| Kim | Hunter |
| Roger | Lewis |
| Danny | Gibson |
| Mike | Harper |
| Monica | Sehgal |
| Hal | Simlai |
| Joseph | Irvine |
| Shahida | Ali |
| Peter | Champion |
+---------+------------+
21 rows in set (0.00 sec)
Pentru a afisa intreaga tabela, in loc sa specificam toate campurile vom folosi simbolul
'*':
SELECT * from angajati_data;
+--------+------------+
| f_name | l_name |
+--------+------------+
| John | Hagan |
| John | MacFarland |
+--------+------------+
2 rows in set (0.00 sec)
Comparatiile MySQL sunt case insensitive ceea ca inseamna ca "john", "John" sau
"JoHn" ar merge in exemplul de mai sus.
Operatori de comparatie
Operator Nume Exemplu
= eqalitate customerid = 3
> mai mare amount>60.00
+--------+------------+
| f_name | l_name |
+--------+------------+
| John | Hagan |
| John | MacFarland |
| Joseph | Irvine |
+--------+------------+
3 rows in set (0.00 sec)
Conditiile SQL pot contine si operatorii logici: AND, OR si NOT. Sa afisam numele
angajatilor care au numele incepand cu 'S' sau 'A':
+----------+
| l_name |
+----------+
| Sharma |
| Anchor |
| Sakamuro |
| Simon |
| Sehgal |
| Simlai |
| Ali |
+----------+
7 rows in set (0.00 sec)
Alte exemple:
SELECT f_name, l_name, title from
-> angajati_data where title
-> IN ('Web Designer', 'System Administrator');
+---------+--------+----------------------+
| f_name | l_name | title |
+---------+--------+----------------------+
| Anamika | Pandit | Web Designer |
| Mary | Anchor | Web Designer |
| Roger | Lewis | System Administrator |
| Danny | Gibson | System Administrator |
+---------+--------+----------------------+
4 rows in set (0.00 sec)
+---------+------------+------+
| f_name | l_name | age |
+---------+------------+------+
| John | Hagan | 32 |
| Ganesh | Pillai | 32 |
| John | MacFarland | 34 |
| Alok | Nanda | 32 |
| Hassan | Rajabi | 33 |
| Arthur | Hoopla | 32 |
| Kim | Hunter | 32 |
| Roger | Lewis | 35 |
| Danny | Gibson | 34 |
| Mike | Harper | 36 |
| Shahida | Ali | 32 |
| Peter | Champion | 36 |
+---------+------------+------+
12 rows in set (0.00 sec)
+---------+------------+--------+
| f_name | l_name | salary |
+---------+------------+--------+
| Manish | Sharma | 200000 |
| Mary | Anchor | 85000 |
| Fred | Kruger | 75000 |
| John | MacFarland | 80000 |
| Edward | Sakamuro | 75000 |
| Alok | Nanda | 70000 |
| Paul | Simon | 85000 |
| Arthur | Hoopla | 75000 |
| Hal | Simlai | 70000 |
| Joseph | Irvine | 72000 |
| Shahida | Ali | 70000 |
+---------+------------+--------+
11 rows in set (0.00 sec)
Sortarea datelor
Inregistrarile extraswe anterior au fost afisate in rodinea in care erau stocate in tabela.
Pentru a le sorta folosim clauza ORDER BY a comenzii SELECT.
SELECT l_name, f_name from
angajati_data ORDER BY l_name;
+------------+---------+
| l_name | f_name |
+------------+---------+
| Ali | Shahida |
| Anchor | Mary |
| Champion | Peter |
| Gibson | Danny |
| Hagan | John |
| Harper | Mike |
| Hoopla | Arthur |
| Hunter | Kim |
| Irvine | Joseph |
| Kruger | Fred |
| Lewis | Roger |
| MacFarland | John |
| Nanda | Alok |
| Pandit | Anamika |
| Pillai | Ganesh |
| Rajabi | Hassan |
| Sakamuro | Edward |
| Sehgal | Monica |
| Sharma | Manish |
| Simlai | Hal |
| Simon | Paul |
+------------+---------+
21 rows in set (0.00 sec)
sau (ordine descrerscatoare):
SELECT f_name from angajati_data
ORDER by f_name DESC;
+---------+--------+
| f_name | l_name |
+---------+--------+
| Manish | Sharma |
| John | Hagan |
| Ganesh | Pillai |
| Anamika | Pandit |
| Mary | Anchor |
+---------+--------+
5 rows in set (0.01 sec)
Similar, putem lista cei mai tineri doi angajati:
SELECT f_name, l_name, age from
angajati_data ORDER BY age
LIMIT 2;
+--------+----------+------+
| f_name | l_name | age |
+--------+----------+------+
| Edward | Sakamuro | 25 |
| Mary | Anchor | 26 |
+--------+----------+------+
2 rows in set (0.01 sec)
+--------+------------+
| f_name | l_name |
+--------+------------+
| John | MacFarland |
| Edward | Sakamuro |
| Alok | Nanda |
+--------+------------+
3 rows in set (0.00 sec)
Comanda de mai sus extrage 3 angajati incepand de la inregistrarea 6.
Folosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date
pentru fiecare camp in parte.
Functii agregat
+-------------+
| MIN(salary) |
+-------------+
| 70000 |
+-------------+
1 row in set (0.00 sec)
+-------------+
| MAX(salary) |
+-------------+
| 200000 |
+-------------+
1 row in set (0.00 sec)
+-------------+
| SUM(salary) |
+-------------+
| 1997000 |
+-------------+
1 row in set (0.00 sec)
+----------+
| COUNT(*) |
+----------+
| 21 |
+----------+
1 row in set (0.00 sec)
select avg(salary) AS
'Salariu mediu' from
angajati_data;
+----------------+
| Salariu mediu |
+----------------+
| 95095.2381 |
+----------------+
1 row in set (0.00 sec)
Clauza GROUP BY permite gruparea informatiilor similare. Deci, pentru a lista toate
functiile unice din tabela:
+----------------------------+
| title |
+----------------------------+
| CEO |
| Customer Service Manager |
| Finance Manager |
| Marketing Executive |
| Multimedia Programmer |
| Programmer |
| Senior Marketing Executive |
| Senior Programmer |
| Senior Web Designer |
| System Administrator |
| Web Designer |
+----------------------------+
11 rows in set (0.01 sec)
+----------------------------+-------------+
| title | AVG(salary) |
+----------------------------+-------------+
| CEO | 200000.0000 |
| Finance Manager | 120000.0000 |
| Senior Marketing Executive | 120000.0000 |
| Senior Programmer | 115000.0000 |
| Senior Web Designer | 110000.0000 |
+----------------------------+-------------+
5 rows in set (0.00 sec)
De multe ori, ca sa raspunzi la o intrebare trebui sa extragi date din mai multe tabele. De
exemplu, pentru a afla ce clienti au facut comenzi luna asta trebuie sa folosesti tabela
clienti si tabela comenzi. Pentru acest lucru in SQL trebuie realizata o relatie intre tabele
(JOIN) pe baza unor informatii comune (un camp de ID).
In exemplul nostru campul care relationeaza tabela 'angajati_data' este emp_id, iar pentru
'angajati_per 'e_id. Sa extragem numele angajatilor casatoriti din angajati_data si numele
sotiei din angajati_per (vom folosi functia CONCAT pentru a alipi doua siruri de
caractere):
+-----------------+-----------------+
| Name | Spouse Name |
+-----------------+-----------------+
| Manish Sharma | Anamika Sharma |
| John Hagan | Jane Donner |
| Ganesh Pillai | Sandhya Pillai |
| Anamika Sharma | Manish Sharma |
| John MacFarland | Mary Shelly |
| Alok Nanda | Manika Nanda |
| Paul Simon | Muriel Lovelace |
| Arthur Hoopla | Rina Brighton |
| Kim Hunter | Matt Shikari |
| Danny Gibson | Betty Cudly |
| Mike Harper | Stella Stevens |
| Monica Sehgal | Edgar Alan |
| Peter Champion | Ruby Richer |
+-----------------+-----------------+
13 rows in set (0.00 sec)
Tipuri de join-uri in MySQL
Produs cartezian, Full Join, Cross join
Toate combinatiile tuturor liniilor din tabela. Se specifica prin virgula si fara
clauza WHERE.
Inner join
Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE
sau cu cuvintele cheie INNER JOIN.
Equi-join
Foloseste o conditie cu '=' pentru a face corespondente intre inregistrari.
Left join
Incearca sa gasesca corespondente intre tabele si cand nu gaseste, umple
inregistrarile fara pereche cu NULL.
Stergerea tabelelor
DROP TABLE angajati_data;
Crearea indecsilor
Se poate face cu comanda INDEX sau specificand la crearea unui tabel un camp ca
PRIMARY KEY.
index nume_index (nume_coloana_indexata)
MySQL ofera 3 tipuri de tabele: ISAM, MyISAM (implicit), BDB, and Heap alese dupa
sintaxa:
Heap-urile sunt tabele hash temporare rezidente in memorie. Tabelele BDB sunt folosite
la tranzactii, iar tabelele ISAM nu mai sunt recomandate. Deci alegerea implicita
MyISAM este cea mai buna si nu trebuie sa-ti faci grji ca trebui sa specifici vreodata un
tip de tabela.
Sintaxe ALTER:
(Redenumire tabela:)alter table nume_vechi rename nume_nou
(Modificare camp:)alter table my_table add column my_column text not null
MySQL are o interfata SQL foarte complexa, dar si intuitiva si usor de invatat. Capitolul
acesta se ocupa cu prezentarea detaliata a unor comenzi diverse (cum se folosesc ele ai
aflat in Utilizare MySQL), tipuri de date si functii de care vei avea nevoie ca sa folosesti
MySQL eficient.
Siruri de caractere
Un sir de caractere (string) este o secventa de caractere aflata intre apostrofuri sau
ghilimele ('un sir' sau "un sir"). Intr-un sir de caractere, unele secvente au un inteles
special. Aceste secvente incep cu '\'. MySQL recunoste urmatoarele secvente de escape:
\0
0 (NULL)
\'
Apostrof
\"
Ghilimele.
\b , \\
Backslash
\n
Linie noua
\r
Carriage return
\t
Tab.
\z
Control-Z (sfarsit de fisier)
\%
Procent `%'
\_
Undersore `_'
Daca vrei sa incluzi ghilimele si apostrofuri in siruri de caractere:
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello';
+-------+---------+-----------+--------+--------+
| hello | "hello" | ""hello"" | hel'lo | 'hello |
+-------+---------+-----------+--------+--------+
mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello";
+-------+---------+-----------+--------+--------+
| hello | 'hello' | ''hello'' | hel"lo | "hello |
+-------+---------+-----------+--------+--------+
Numere
Numerele intregi sunt reprezentate ca o secventa de cifre, iar float-urile folosesc '.' ca
separator decimal.
Valoarea NULL
Valoarea NULL inseamna 'Nici o informatie' si difera de valoarea 0 pentru intregi si de
sirul gol pentru siruri de caractere.
select @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
+----------------------+------+------+------+
| @t1:=(@t2:=1)+@t3:=4 | @t1 | @t2 | @t3 |
+----------------------+------+------+------+
| 5 | 5 | 1 | 4 |
+----------------------+------+------+------+
Comentarii
MySQL suporta cometariile #pana la sfarsit de linie, --pana la sfarsit de linie si /*linii
multiple*/.
Cuvinte rezervate
Functii
REGEXP
Face o cautare folosind o expresie string si o expresie regulara. Returneaza 1 (a gasit) sau
0(n-a gasit).
expr REGEXP pat
mysql> select name from guestbook where name regexp ‘^j.*g’;
STRCMP
STRCMP(expr1,expr2)
Returneaza 0 daca sirurile sunt egale, -1 daca primul sir e mai mic si 1 daca sirul 2 e mai
mic ca sirul 1.
+--------------------------------+
| ifnull(1/0, ‘exp 1 is null’) |
+--------------------------------+
| exp 1 is null |
+--------------------------------+
1 row in set (0.00 sec)
IF
IF(expr1,expr2,expr3)
mysql> select if(name like ‘jay%’, ‘Yes’, ‘No’) as ‘Jay Names’ -> from
guestbook;
Functii matematice
ABS (modulul unui numar)
SIGN (semnul:-1 negativ, 1 pozitiv, 0 egal cu 0)
MOD (rstul impartirii)
FLOOR (cea mai mare valoare intreaga mai mica ca un numar)
CEILING (cea mai mica valoare intreaga mai mare ca un numar)
ROUND (un numar rotunjit la o valoare intreaga)
TRUNCATE (trunceaza un numar la un anumit numar de zecimale)
|truncate(8.53,0)|truncate(8.43,0)|truncate(8.534,2)|
| 8 | 8 | 8.53 |
1 row in set (0.05 sec)
|least(2,7,9,1)|
| 1 |
1 row in set (0.00 sec)
| ascii(‘\n’)|
| 10 |
1 row in set (0.00 sec)
ORD(str)
CONV(N,from_base,to_base)
BIN(N) (converteste N in baza 2)
OCT(N) (converteste N in baza 8)
HEX(N) (converteste N in baza 16)
CHAR(N1,N2,...) (sirul de caractere format din reprezentarile ASCII ale argumentelor
intregi)
CONCAT(str1,str2,...) (concateneaza doua siruri de cacactere)
LENGTH (lungimea unui sir)
LOCATE(substr,str [,pos]) (cauta pozitia unui subsir intr-un sir)
mysql> select locate(‘s’, ‘mysql functions’) as example1,
-> locate(‘s’, ‘mysql functions’,4) as example2;
|example1|example2|
| 3 | 15 |
1 row in set (0.00 sec)
INSTR(str,substr) (pozitia subsirului in sir)
LPAD(str,len,padstr) (sirul padstr e adaugat la stanga lui srt)
RPAD
LEFT(str,len) (primele 'len' caractere din str)
RIGHT(str,len)
SUBSTRING(str,pos[,len]) sau
MID(str,pos,len)
mysql> select mid(‘mysqlfunctions’,6,8);
| mid(‘mysqlfunctions’,6,8)|
| function |
1 row in set (0.00 sec)
SUBSTRING_INDEX(str,delim,count)
mysql> select substring_index(‘mysqlfunctionsmysql’, ‘fu’, 1);
| substring_index(‘mysqlfunctions’, ‘fu’, 1) |
| mysql |
1 row in set (0.00 sec)
LTRIM
RTRIM
TRIM
TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)
REPLACE(str,from_str,to_str)
SOUNDEX(str) (sirul in format SOUNDEX)
SPACE(N) (un spatiu de N pozitii)
REPEAT(str,count) (repeta str de 'count' ori)
REVERSE (inverseaza un sir)
INSERT(str,pos,len,newstr)
mysql> select insert(‘mysqlfunctions’, 6,2,’FU’);
+ +
|insert(‘mysqlfunctions’, 6,2,’FU’)|
+ +
|mysqlFUnctions |
+ +
1 row in set (0.44 sec)
WEEKDAY
DAYOFMONTH
DAYOFYEAR
MONTHNAME
QUARTER (semestrul din care face parte data)
WEEK(date [, first]) (first=0-saptamana incepe duminica, first=1-saptamana incepe
luni)
YEAR
YEARWEEK (anul si saptamana in format YYYYWW)
HOUR
MINUTE
SECOND
PERIOD_ADD(P,N) (adauga N luni la perioda P)
PERIOD_DIFF(P1,P2)
DATE_ADD
DATE_SUB(date,INTERVAL expr type)
TO_DAYS
FROM_DAYS
DATE_FORMAT
Specificatori pentru DATE_FORMAT
%M Luna (January÷December)
%W Ziua (Sunday÷ Saturday)
%D Numarul zilei(1st, 2nd, 3rd, etc.)
%Y Anul AAAA
%y Anul AA
%a Numele abreviat al zilei(Sun..Sat)
%d Numarul zilei lunii(00..31)
%e Numarul zilei lunii(0..31)
%m Numarul lunii(01..12)
%c Numarul lunii(1..12)
%b Numele lunii(Jan..Dec)
%j Numarul zilei in an(001..366)
%H Ora (00..23)
%k Ora (0..23)
%h Ora (01..12)
%I Ora (01..12)
%l Ora (1..12)
%i Minutele(00..59)
%r Timpul, 12-ore (hh:mm:ss [AP]M)
%T Timpul, 24-ore (hh:mm:ss)
%S Secundele(00..59)
%s Secundele (00..59)
%p AM sau PM
%w Ziua saptamanii (0=Sunday..6=Saturday)
%U Saptamana (0..53)
%u Saptamana (0..53)
%V Saptamana (1..53)
%v Saptamana (1..53)
%X Anul pentru saptamana
%x Anul pentru saptamana
%% Caracterul %
Exemplu:
mysql> select date_format(‘2001-01-01’, ‘%W %M %d, %Y’);
TIME_FORMAT
CURDATE
CURTIME
NOW (data si ora curenta YYYY-MM-DD HH:MM:SS)
SELECT
INSERT
ALTER TABLE
alter_specification:
ADD [COLUMN] create_definition [FIRST | AFTER column_name ]
sau ADD [COLUMN] (create_definition, create_definition,...)
sau ADD INDEX [index_name] (index_col_name,...)
sau ADD PRIMARY KEY (index_col_name,...)
sau ADD UNIQUE [index_name] (index_col_name,...)
sau ADD FULLTEXT [index_name] (index_col_name,...)
sau ADD [CONSTRAINT symbol] FOREIGN KEY index_name
(index_col_name,...)
[reference_definition]
sau ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
sau CHANGE [COLUMN] old_col_name create_definition
sau MODIFY [COLUMN] create_definition
sau DROP [COLUMN] col_name
sau DROP PRIMARY KEY
sau DROP INDEX index_name
sau DISABLE KEYS
sau ENABLE KEYS
sau RENAME [TO] new_tbl_name
sau ORDER BY col
sau table_options
UPDATE
DELETE
CREATE INDEX
CREATE TABLE
create_definition:
col_name type [NOT NULL | NULL] [DEFAULT default_value]
[AUTO_INCREMENT]
[PRIMARY KEY] [reference_definition]
sau PRIMARY KEY (index_col_name,...)
sau KEY [index_name] (index_col_name,...)
sau INDEX [index_name] (index_col_name,...)
sau UNIQUE [INDEX] [index_name] (index_col_name,...)
sau FULLTEXT [INDEX] [index_name] (index_col_name,...)
sau [CONSTRAINT symbol] FOREIGN KEY index_name (index_col_name,...)
[reference_definition]
sau CHECK (expr)
type:
TINYINT[(length)] [UNSIGNED] [ZEROFILL]
sau SMALLINT[(length)] [UNSIGNED] [ZEROFILL]
sau MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL]
sau INT[(length)] [UNSIGNED] [ZEROFILL]
sau INTEGER[(length)] [UNSIGNED] [ZEROFILL]
sau BIGINT[(length)] [UNSIGNED] [ZEROFILL]
sau REAL[(length,decimals)] [UNSIGNED] [ZEROFILL]
sau DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]
sau FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]
sau DECIMAL(length,decimals) [UNSIGNED] [ZEROFILL]
sau NUMERIC(length,decimals) [UNSIGNED] [ZEROFILL]
sau CHAR(length) [BINARY]
sau VARCHAR(length) [BINARY]
sau DATE
sau TIME
sau TIMESTAMP
sau DATETIME
sau TINYBLOB
sau BLOB
sau MEDIUMBLOB
sau LONGBLOB
sau TINYTEXT
sau TEXT
sau MEDIUMTEXT
sau LONGTEXT
sau ENUM(value1,value2,value3,...)
sau SET(value1,value2,value3,...)
index_col_name:
col_name [(length)]
reference_definition:
REFERENCES tbl_name [(index_col_name,...)]
[MATCH FULL | MATCH PARTIAL]
[ON DELETE reference_option]
[ON UPDATE reference_option]
reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT
table_options:
TYPE = {BDB | HEAP | ISAM | InnoDB | MERGE | MYISAM }
sau AUTO_INCREMENT = #
sau AVG_ROW_LENGTH = #
sau CHECKSUM = {0 | 1}
sau COMMENT = "string"
sau MAX_ROWS = #
sau MIN_ROWS = #
sau PACK_KEYS = {0 | 1}
sau PASSWORD = "string"
sau DELAY_KEY_WRITE = {0 | 1}
sau ROW_FORMAT= { default | dynamic | fixed | compressed }
sau RAID_TYPE= {1 | STRIPED | RAID0 } RAID_CHUNKS=#
RAID_CHUNKSIZE=#
sau UNION = (table_name,[table_name...])
sau DATA DIRECTORY="directsauy"
sau INDEX DIRECTORY="directsauy"
select_statement:
[IGNORE | REPLACE] SELECT ... (Some legal select statement)
CREATE DATABASE
DROP DATABASE
DROP INDEX
DROP INDEX index_name ON tbl_name
DROP TABLE
RENAME TABLE
JOIN
table_reference, table_reference
table_reference [CROSS] JOIN table_reference
table_reference INNER JOIN table_reference
table_reference STRAIGHT_JOIN table_reference
table_reference LEFT [OUTER] JOIN table_reference ON conditional_expr
table_reference LEFT [OUTER] JOIN table_reference USING (column_list)
table_reference NATURAL LEFT [OUTER] JOIN table_reference
{ oj table_reference LEFT OUTER JOIN table_reference ON conditional_expr
}
Administrarea MySQL
Administrarea utilizatorilor
Controlul accesului
Comezile GRANT si REVOKE
Backup-ul bazelor de date
Securitatea datelor
Optimizarea MySQL
Administrarea utilizatorilor
Tabelele de grant
Drepturile utilizatorilor MySQL sunt stocate in cateva tabele care sunt create automat la
instalarea MySQL. Aceste tabele apartin bazei de date mysql:
Fiecare dintre aceste tabele corespunde controlului unui nivel de acces. Poti crea un
oricati utilizatori care pot accesa MySQL de pe diferite gazde. Pentru fiecare combinatie
utilizator/gazda, acorzi acces la o intreaga baza de data, la anumite tabele, sau la anumite
coloane dintr-o tabele. Aditional, aceste tabele acorda privilegii de administrare.
Utilizatorilor le poate fi dat dreptul de a adauga/sterge baze de date sau de a acorda altor
utilizatori drepturi de administare.
In practica, nu ar trebui sa acorzi mai multe drepturi decat e necesar pentru a proteja
datele de curiosi sau de incompetenti. Pentru asta trebuie sa stii ca drepturile sunt
acordate intr-un mod ierarhic. Cele acordate pe tabela user sunt universale: daca un
utilizator are privilegiu de stergere(drop) in tabela user, acesta poate sterge orice tabela
din rocie baza de date din MySQL. Tabela db acorda privilegii asupra unei intregi baze
de date. Pentru o tabela/set de tabele foloseste tables_priv. Tabela columns_priv
acorda drepturi asupra unor anumite colobne dintr-o tabela.
Tabela user
Orice utilizator care vrea sa lucreze in MySQL trebuie sa fie inscris in acesta tabela.
Drepturile pot fi acordate in alta parte, dar fara o inscriere aici, utilizatorului nu i se va
permite conectarea la server.
Tabela db
Drepturile specificate aici merg doar pentru baza de date specificate in coloana
db_column.
Controlul accesului
Tabele descrise mai sus sunt tabele normale MySQl si pot fi modificate cu comenzile
invatate. De exemplu, pentru a crea un nou utilizator:
INSERT INTO user (Host, User, Password, Select_priv, Insert_priv,
Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv,
Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv,
Index_priv, Alter_priv) VALUES (‘localhost’, ‘juan’, ‘password’, ‘N’,
‘N’, ‘N’, ‘N’, ‘N’, ‘N’, ‘N’, ‘N’, ‘N’, ‘N’, ‘N’, ‘N’, ‘N’, ‘N’)
Nu este insa ce si-ar dori sa fac administratorul de fiecare data. Din fericire, MySQL
ofera cateva comenzi care fac lucrul cu utilizatorii mult mai usor:
GRANT
GRANT privilegii [coloane]
ON obiect
TO utilizator [IDENTIFIED BY ‘parola’]
[WITH GRANT OPTION]
Niveluri de drepturi
grant all on *.* Acorda drepturi universale
Acorda drepturi asupra tuturor tabelelor din baza
grant all on database.*
de date
grant all on database.table_name Drepturi pentru o singura tabela
grant all(col1, col2) on
Drepturi pentru anumite coloane dintr-o tabela
database.table_name
Daca vrei sa anulezi drepturile acordate unui utilizator poti folosi comanda REVOKE:
REVOKE privilegii [(coloane)]
ON item
FROM utilizator
Afisarea drepturilor
Din versiunea 3.23.4 MySQL a introdus comanda show grants care permite vizualizarea
drepturilor acordate la un moment dat:
Reincarcarea drepturilor
MySQL citeste automat tabelele de privilegii cand e pornit si cand sunt date comenzi
GRANT sau REVOKE. Modificarile facute manual tabelelor de drepturi nu iau efect
decat daca se restarteaza MySQL. Ca sa functioneze aceste modificari reincarca tabelele:
flush privileges
sau
mysqladmin flush-privileges
sau
mysqladmin reload
Securitatea e foarte importanta, in special cand vei conecta baza ta de date MySQL la
site-ul Web. Cand rulezi MySQL ia in considerare urmatoarele sfaturi:
Nu da nimanui acces la tabela user !
Invata sistemul de privilegii al MySQL ! Tasteaza mysql -u root. Daca te poti
conecta fara sa ti se ceara o parola, oricine poate face acelasi lucru. Vezi, in
pagina de instalare cum se poate pune parola de root pe sever.
Nu folosi parole din dictionar deoarece exista programe care le pot sparge!
Foloseste initialele cuvintelor dintr-o propozitie (de exemplu aaum 'Ana are un
miel') sau combinatii de pe tastatura (in loc de stefan-dyrgsm, adica o litera spre
dreapta de pe tastatura).
Investeste intr-un firewall.
Foloseste parole pentru toti utilizatorii MySQL si ai grija in ce fisiere script le
memorezi. Poti cripta parolele cu functiile PASSWORD() sau MD5().
La conectarea pe Web, ar trebui sa creezi un utilizator special numai pentru Web
(de exemplu, sa aiba doar drepturi de SELECT pe tabela cu produse si de
INSERT pe tabela cu comenzile facute).
Daca utilizatorii care folosesc formularele de pe Web tasteaza date confidentiale,
trebuie sa folosesti SSL (Secure Socket Layer) pentru ca altfel datele vor fi
transmise spre server in fomatul text.
Optimizarea MySQL
Configurarea MySQL
Schimbarea setului de caractere
Mesaje de eroare in romana
Utilitarele MySQL
mysql
mysqladmin
mysqldump
mysqlimport
Pentru a adauga un nou set de caractere decide daca setul e unul simplu sau complex (are
nevoie de sau nu de suport multi-byte) si:
[Link] simplu:
[Link] complex:
1. Creaza fisierul `strings/ctype-SETUL.c'.
2. Adauga SETUL la sfarasitul fisierului `sql/share/charsets/Index' si atribuie-i un
numar.
3. Plaseaza un comentariu in partea de sus a fisierului creat la 1. :
4. /*
5. * This comment is parsed by configure to create ctype.c
6. * .configure. number_MYSET=MYNUMBER
7. * .configure. strxfrm_multiply_MYSET=N
8. * .configure. mbmaxlen_MYSET=N<
*/
9. Creaza urmatoarele functii: my_strncoll_MYSET(), my_strcoll_MYSET(),
my_strxfrm_MYSET(), my_like_range_MYSET().
10. Adauga numele 'SETUL' la listele CHARSETS_AVAILABLE and
COMPILED_CHARSETS din '[Link]'.
Utilitarele MySQL
Sunt niste programe-client care se folosesc pentru a construi, configura si intretine bazele
de date.
myisamchk
Descrie, verifica si optimizeaza tabele.
make_binary_release
Face un pachet binar cu dstrubutia MySQL.
msql2mysql
Converteste programe mSQL in MySQL.
mysql
mysqlaccess
Verifica privilegii de acces pentru o combinatie de gazda-utilizator-baza de date.
mysqladmin
mysqlbug
Genereaza un raport cu defectge (bugs) gasite in MySQL.
mysqld
Daemon-ul SQL.
mysqldump
mysqlimport
mysqlshow
Afiseaza informatii despre baze de date, tabele, coloane, indecsi.
mysql_install_db
Creaza tabelele de privilegii.
replace
Program utilitar care inlocuieste un sir de caractere cu al sir dintr-un anumit fisier.
[Link]
Este interfata in linie de comanda a MySQL-ului si-ti permite sa rulezi comenzi SQL sau
comenzi specifice MySQL. Sintaxa este:
mysql [options] [database name] [<inputfile] [>outputfile]
Tasteaza help pentru a vedea unele facilitati ale mysql:
help (\h) Afiseaza acest text
? (\h) Sinonim pentru ‘help’
clear (\c) "Curata" ecranul
connect (\r) Reconectare la server
edit (\e) Comanda edit cu $EDITOR
exit (\q) Iesire din mysql
go (\g) Trimite comanda la server
ego (\G) Trimite comanda si afiseaza rezultatul vertical
print (\p) Tipareste comanda curenta
quit (\q) Iesire din mysql
rehash (\#) Reconstruieste hash-ul
status (\s) Status info
use (\u) Foloseste o baza de date
mysqladmin
Exemplu:
mysqladmin proc stat
+----+-------+-----------+----+-------------+------+-------+------ +
| Id | User | Host | db | Command | Time | State | Info |
+----+-------+-----------+----+-------------+------+-------+------ +
| 6 | monty | localhost | | Processlist | 0 | | |
+----+-------+-----------+----+-------------+------+-------+------ +
Uptime: 10077 Threads: 1 Questions: 9 Slow queries: 0 Opens: 6
Flush tables: 1 Open tables: 2 Memory in use: 1092K Max memory
used: 1116K
mysqldump
mysqlimport
Este o interfata in linie de comanda pentru comanda SQL LOAD DATA INFILE. Sintaxa:
mysqlimport [options] database textfile1 [textfile2....]
Folosire (cu mysqldump):
mysqldump -T . tracking tabela1
mysql tracking <[Link]
mysqlimport tracking [Link]
Optiuni:
-? --help
-d --delete Goleste tabela inainte de
import
--fields-terminated-by=...
--fields-enclosed-by=...
--fields-optionally-
enclosed-by=...
--fields-escaped-by=...
--lines-terminated-by=...
-f --force
-h host_name --host=host_name
-l --lock-tables
-L --local Fisierele sunt pe gazda
clientului
-p[...] --password[=...]
-P port_num --port=port_num
-I --ignore Pentru inregistrari duplicat
(nu sunt luate in seama)
-r --replace Inregistrarile duplicat sunt
inlocuite cu noua
versiune
-s --silent
-u user_name --user=user_name
-c --columns=... Campurile care vor fi
actualizate
Trebuie specificat neaparat una din optiunile --ignore sau --replace, altfel, cand se
vor gasi inregistrari duplicat in tabela si-n fiserul text se va genera o eroare.
$username="nume_utilizator";
$password="parola";
$database="baza_de_date";
mysql_connect(localhost,$username,$password);
Executia unei comenzi se poate face direct sau atribuind comanda unei variabile (daca
se asteapta un rezultat):
mysql_query($query);
Adaugarea de inregistrari
Informatiile urmatoare vor fi adaugate in agenda cu comanda: First: Ion
Last: Gheorghe
Phone: 01234 567890
Mobile: 00112 334455
Fax: 01234 567891
E-mail: iongh@[Link]
Web: [Link]
Formularele HTML
Iata cum ar putea sa arate un fomrular cu ajutorul caruia se vor culege informatii despre
vizitatori:
Prenume:
Nume:
Telefon:
Celular:
Fax:
E-mail:
Site Web:
Codul este:
<form action="[Link]" method="post">
Prenume: <input type="text" name="first"><br>
Last Nume: <input type="text" name="last"><br>
Telefon: <input type="text" name="phone"><br>
Mobile: <input type="text" name="mobile"><br>
Fax: <input type="text" name="fax"><br>
E-mail: <input type="text" name="email"><br>
Site Web:<input type="text" name="web"><br>
<input type="Submit">
</form>
<?
$username="utilizator";
$password="parola";
$database="baza_de_date";
mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die( "Nu se poate deschide BD");
mysql_close();
?>
Afisarea inregistrarilor
$query="SELECT * FROM agenda";
$result=mysql_query($query);
Rezultatele sunt acum intr-un tablou ('result'). Pentru a-i afisa elementele, trebuie folosit
un ciclu:
$num=mysql_numrows($result);
$i=0;
while ($i < $num) {
COD PT AFISaRE
++$i;
}
mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die( "Nu se poate deschide baza de
date");
$query="SELECT * FROM agenda";
$result=mysql_query($query);
$num=mysql_numrows($result);
mysql_close();
$i=0;
while ($i < $num) {
$first=mysql_result($result,$i,"first");
$last=mysql_result($result,$i,"last");
$phone=mysql_result($result,$i,"phone");
$mobile=mysql_result($result,$i,"mobile");
$fax=mysql_result($result,$i,"fax");
$email=mysql_result($result,$i,"email");
$web=mysql_result($result,$i,"web");
?>
Actualizarea inregistrarilor
$id=$_GET['id'];
$username="utilizator";
$password="parola";
$database="baza_de_date";
mysql_connect(localhost,$username,$password);
$i=0;
while ($i < $num) {
$first=mysql_result($result,$i,"first");
$last=mysql_result($result,$i,"last");
$phone=mysql_result($result,$i,"phone");
$mobile=mysql_result($result,$i,"mobile");
$fax=mysql_result($result,$i,"fax");
$email=mysql_result($result,$i,"email");
$web=mysql_result($result,$i,"web");
Spatiu pentru cod
++$i;
}
Formularul HTML:
<form action="[Link]" method="post">
<input type="hidden" name="ud_id" value="<? echo "$id"; ?>">
Prenumele: <input type="text" value="ud_first" value="<? echo "$first"?
>"><br>
Numele: <input type="text" value="ud_last" value="<? echo "$last"?
>"><br>
Ner. telefon: <input type="text" value="ud_phone" value="<? echo
"$phone"?>"><br>
Nr. celular: <input type="text" value="ud_mobile" value="<? echo
"$mobile"?>"><br>
Nr. fax: <input type="text" value="ud_fax" value="<? echo "$fax"?>"><br>
Adresa e-mail: <input type="text" value="ud_email" value="<? echo
"$email"?>"><br>
Adresa Web: <input type="text" value="ud_web" value="<? echo "$web"?
>"><br>
<input type="Submit" value="Actualizeaza">
</form>
$ud_id=$_POST['ud_id'];
$ud_first=$_POST['ud_first'];
$ud_last=$_POST['ud_last'];
$ud_phone=$_POST['ud_phone'];
$ud_mobile=$_POST['ud_mobile'];
$ud_fax=$_POST['ud_fax'];
$ud_email=$_POST['ud_email'];
$ud_web=$_POST['ud_web'];
$username="utilizator";
$password="parola";
$database="baza_de_date";
mysql_connect(localhost,$username,$password);