Sunt mai multe feluri in care poti prelua datele dintr-o baza de date folosind extensia PDO. Cea mai rapida cale, dar in opinia mea prea lunga pentru a tine minte fiecare element din aceasta, este:
[javascript src=”https://snipt.net/embed/485899d9c0911902257e5389aa7c90a9/”]O solutie mai lunga, dar mai buna, este pastrarea interogarii separat de restul codului:
[javascript src=”https://snipt.net/embed/5162e2f7712c8db4fde86612f99461df/”]Conditia WHERE
Am putea la fel de bine sa introducem conditia “WHERE” in interogarile pe care le-am scris mai devreme, dar cea mai buna solutie de a interoga baza de date este ca atunci cand folosim conditii “WHERE” sa ne folosim de parametri, fie ca acestia sunt pozitionali sau numiti: In acest fel ne asiguram ca variabilele au fost curatate de orice element care ar putea lovi in securitatea site-ului:
[javascript src=”https://snipt.net/embed/b265d05474c0ce3f8868169c67e68b45/”]LIKE – Important de mentionat
Multi programatori aflati la inceput se lovesc de problema legata de conditia LIKE care presupune folosirea de wildcard-uri (%) in cautarea intr-o baza de date.
Astfel, daca te folosesti de bindParam pentru a face o cautare cu conditia LIKE, nu te poti folosi de procente in placeholder ca aici: ‘%:cuvant%’.
Este incorect sa scrii interogarea astfel: “SELECT * FROM table WHERE prenume LIKE ‘%:keyword%'”;
Solutia corecta este sa lasi placeholder-ul curat: “SELECT * FROM table WHERE prenume LIKE :keyword”;
…iar apoi sa adaugi procentele intr-o variabila php unde pastrezi cuvantul cautat: $keyword = “%”.$keyword.”%”;
Aceasta variabila o atasezi prin: bindParam: $sth->bindParam(‘:keyword’,$keyword,PDO::PARAM_STR);
Vezi si http://www.php.net/manual/en/pdostatement.bindparam.php#99698
Despre metodele fetch() si fetchAll()
Dupa cum ai vazut, metoda fetch() returneaza fiecare rand dintr-un set de rezultate, unul dupa altul, sau FALSE daca nu mai exista randuri ca urmare a unei interogari.
Pe de alta parte, metoda fetchAll() returneaza un vector (array) care contine toate randurile din setul de rezultate obtinut in urma interogarii.
Oricum ar fi, metodele returneaza un vector in care fiecare element reprezinta o coloana, daca folosim fetch(), sau un vector care are ca elemente randuri ce contin la randul lor cate un vector in care fiecare element reprezinta coloanele.
FETCH_ASSOC
Dupa cum ai vazut in aproape toate exemplele mele, folosesc cel mai des constanta FETCH_ASSOC in momentul in care preiau rezultatele din baza de date. Fac astfel deoarece imi este mai usor sa folosesc valorile din baza de date prin numirea coloanelor.
Asadar, cand preiei rezultatele cu aceasta constanta, de obicei chem valoarea randului de rezultate astfel: $row[‘column’].
FETCH_NUM
Este o constanta care returneaza un vector indexat dupa numarul coloanei in ordinea in care este returnata intr-un set de rezultate, numaratoarea coloanelor incepand de la pozitia 0:
Asta inseamna ca va trebui sa chemi prima coloana a randului de rezultate astfel: $row[0].
FETCH_BOTH
Consumand mai multa memorie, constanta FETCH_BOTH va returna un vector indexat atat dupa numele coloanei, cat si dupa pozitia acesteia in vector.
Asta inseamna ca poti chema coloanele fie prin $row[‘firstcolumn’] fie prin $row[0].
FETCH_OBJ
Aceasta constanta iti va returna un obiect cu nume de proprietati ce corespund numelor coloanelor returnate in setul de rezultate. Prin urmare, vei obtine coloane chemand-o astfel: $row->firstcolumn.
Pentru aceasta lectie, cred ca am invatat destul. Mai sunt cateva lucruri de spus, dar consider ca pentru a avea o baza este de ajuns sa ne oprim aici. Daca esti de parere ca am ratat ceva, te rog sa imi scrii un comentariu. Multumesc.