Pentru selectare date dintr-un tabel MySQL se foloseste instructiunea SELECT, iar prin metode fetch specifice PDO datele cu randurile selectate primite de la serverul MySQL pot fi preluate in mai multe moduri, cu metode si constante FETCH.
Dupa ce tabelul MySQL este creat si are randuri adaugate, se aplica interogarea SELECT pentru a obtine date din randurile tabelului. Se poate folosi metoda query(), aceasta returneaza un set de rezultate cu datele obtinute de la MySQL, sau FALSE in caz de eroare.
In exemplele prezentat aici se foloseste tabelul creat in lectia anterioara, care arata astfel:
| id | | nume | | categorie | | adresa | ------------------------------------------------------------------------------------------------------------ | 1 | | Cursuri - Tutoriale | | educatie | | marplo.net | | 2 | | Curs PHP-MySQL | | programare | | marplo.net/php-mysql | | 3 | | Cursuri Engleza | | limbi straine | | marplo.net/engleza |
<?php // Datele de conectare (adresa_server, baza_de_date, nume si parola) $hostdb = 'localhost'; $namedb = 'teste'; $userdb = 'username'; $passdb = 'password'; try { // Conectare si creare obiect PDO $dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb); $dbh->exec("SET CHARACTER SET utf8"); // Setare encoding caractere UTF-8 // Selectare date $sql = "SELECT * FROM `sites` WHERE `id` IN (1, 3)"; $datas = $dbh->query($sql); // Daca select-ul e facut cu succes ($datas nu e false) if($datas !== false) { $cols = $datas->columnCount(); // Numar coloane returnate echo 'Nr. coloane returnate: '. $cols. '<br />'; // Se parcurg si afiseaza datele selectate foreach($datas as $row) { echo $row['id']. ' - '. $row['nume']. ' - '. $row['categorie']. ' - '. $row['adresa']. '<br />'; } } $dbh = null; // Deconectare } catch(PDOException $e) { echo $e->getMessage(); } ?>- Metoda "columnCount()" returneaza numarul de coloane din setul de rezultate. Observati ca se aplica la instanta in care s-a executat interogarea (aici variabila $datas).
fetch() returneaza fiecare rand, unul dupa altul, sau FALSE cand nu mai sunt randuri. Cu aceasta metoda se poate determina modul in care sunt preluate datele.
fetch() poate primi optional un argument prin care se determina modul in care valorile sunt returnate: Array, Obiect, Sir, .... Acest argument este o constanta care se aplica cu sintaxa:
PDO::FETCH_MOD
In continuare sunt prezentate cateva din aceste moduri, cele mai comune:
<?php // Datele de conectare (adresa_server, baza_de_date, nume si parola) $hostdb = 'localhost'; $namedb = 'teste'; $userdb = 'username'; $passdb = 'password'; try { // Conectare si creare obiect PDO $dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb); $dbh->exec("SET CHARACTER SET utf8"); // Setare encoding caractere UTF-8 // Selectare date din MySQL $sql = "SELECT * FROM `sites`"; $datas = $dbh->query($sql); // Se parcurg datele si le afiseaza while($row = $datas->fetch(PDO::FETCH_ASSOC)) { echo $row['id']. ' - '. $row['nume']. ' - '. $row['categorie']. ' - '. $row['adresa']. '<br />'; } $dbh = null; // Deconectare } catch(PDOException $e) { echo $e->getMessage(); } ?>- In browser apare:
<?php // Datele de conectare (adresa_server, baza_de_date, nume si parola) $hostdb = 'localhost'; $namedb = 'teste'; $userdb = 'username'; $passdb = 'password'; try { // Conectare si creare obiect PDO $dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb); $dbh->exec("SET CHARACTER SET utf8"); // Setare encoding caractere UTF-8 // Selectare date din MySQL $sql = "SELECT * FROM `sites`"; $datas = $dbh->query($sql); // Se parcurg datele while($row = $datas->fetch(PDO::FETCH_NUM)) { echo $row[0]. '-'. $row[1]. '<br />'; // Afiseaza datele din prima si a doua coloana } $dbh = null; // Deconectare } catch(PDOException $e) { echo $e->getMessage(); } ?>- In browser afiseaza:
<?php // Datele de conectare (adresa_server, baza_de_date, nume si parola) $hostdb = 'localhost'; $namedb = 'teste'; $userdb = 'username'; $passdb = 'password'; try { // Conectare si creare obiect PDO $dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb); $dbh->exec("SET CHARACTER SET utf8"); // Setare encoding caractere UTF-8 // Selectare date din MySQL, unde "id" are valoarea 2 $sql = "SELECT `id`, `nume` FROM `sites` WHERE `id`=2"; $datas = $dbh->query($sql); // Se parcurg datele while($row = $datas->fetch(PDO::FETCH_BOTH)) { echo $row['id']. '-'. $row['nume']. '<br />'; // Afiseaza datele din coloanele 'id' si 'nume' echo $row[0]. '-'. $row[1]. '<br />'; // Afiseaza din prima si a doua coloana (aceleasi) } $dbh = null; // Deconectare } catch(PDOException $e) { echo $e->getMessage(); } ?>- In browser apare:
<?php // Datele de conectare (adresa_server, baza_de_date, nume si parola) $hostdb = 'localhost'; $namedb = 'teste'; $userdb = 'username'; $passdb = 'password'; try { // Conectare si creare obiect PDO $dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb); $dbh->exec("SET CHARACTER SET utf8"); // Setare encoding caractere UTF-8 // Selectare date din MySQL, randuri cu "id" mai mic decat 3 $sql = "SELECT `id`, `nume` FROM `sites` WHERE `id`<3"; $datas = $dbh->query($sql); // Se parcurg datele while($row = $datas->fetch(PDO::FETCH_OBJ)) { echo $row->id. '-'. $row->nume. '<br />'; // Afiseaza datele din coloanele 'id' si 'nume' } $dbh = null; // Deconectare } catch(PDOException $e) { echo $e->getMessage(); } ?>- Va afisa:
<?php // Datele de conectare (adresa_server, baza_de_date, nume si parola) $hostdb = 'localhost'; $namedb = 'teste'; $userdb = 'username'; $passdb = 'password'; // Definire clasa class Sites { // Definire proprietati public $id; public $categorie; // Metoda a clasei function makeString() { // Returneaza un sir cu valorile proprietatilor, cu primul caracter din cuvinte majuscula return ucwords($this->id. ' - '. $this->categorie). '<br />'; } } try { // Conectare si creare obiect PDO $dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb); $dbh->exec("SET CHARACTER SET utf8"); // Setare encoding caractere UTF-8 // Selectare date din MySQL, coloanele "id" si "categorie" $sql = "SELECT `id`, `categorie` FROM `sites`"; $datas = $dbh->query($sql); $obj = $datas->fetchALL(PDO::FETCH_CLASS, 'Sites'); // Aplicare FETCH_CLASS la clasa Sites // Parcurge datele din setul de rezultate, creaza instanta de clasa $insSites foreach($obj as $insSites) { echo $insSites->makeString(); // Apeleaza metoda makeString() la instanta clasei } $dbh = null; // Deconectare } catch(PDOException $e) { echo $e->getMessage(); } ?>- Observati cum e aplicat FETCH_CLASS, la metoda "fetchALL()" si cu un argument tip sir ce reprezinta numele clasei (aici "Sites").
<?php // Datele de conectare (adresa_server, baza_de_date, nume si parola) $hostdb = 'localhost'; $namedb = 'teste'; $userdb = 'username'; $passdb = 'password'; // Definire clasa class Sites { // Definire proprietati public $id; public $categorie; // Metoda a clasei function makeString() { // Returneaza un sir cu valorile proprietatilor, primul caracter al cuvintelor majuscula return ucwords($this->id. ' - '. $this->categorie). '<br />'; } } try { // Conectare si creare obiect PDO $dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb); $dbh->exec("SET CHARACTER SET utf8"); // Setare encoding caractere UTF-8 // Selectare date din MySQL, coloanele "id" si "categorie" $sql = "SELECT `id`, `categorie` FROM `sites`"; $datas = $dbh->query($sql); // Parcurgere instanta de obiect creata cu fetchObject() la clasa Sites while($obj = $datas->fetchObject('Sites')) { echo $obj->makeString(); // Afiseaza rezultatul apelarii metodei makeString() } $dbh = null; // Deconectare } catch(PDOException $e) { echo $e->getMessage(); } ?>- Numele coloanelor din fiecare rand sunt folosite ca proprietati ale clasei apelate (aici Sites)
<?php // Datele de conectare (adresa_server, baza_de_date, nume si parola) $hostdb = 'localhost'; $namedb = 'teste'; $userdb = 'username'; $passdb = 'password'; // Definire functie function test($id, $nume) { // Returneaza un sir cu datele din parametri, cu majuscule return strtoupper($id.'-'.$nume); } try { // Conectare si creare obiect PDO $dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb); $dbh->exec("SET CHARACTER SET utf8"); // Setare encoding caractere UTF-8 // Selectare date din MySQL $sql = "SELECT `id`, `nume` FROM `sites`"; $datas = $dbh->query($sql); $ar_row = $datas->fetchALL(PDO::FETCH_FUNC, 'test'); // Aplicare FETCH_FUNC la functia test() var_export($ar_row); // Afiseaza structura Array-ului $dbh = null; // Deconectare } catch(PDOException $e) { echo $e->getMessage(); } ?>- Acest mod este util cand se doreste aplicarea acelorasi instructiuni la mai multe seturi de date obtinute din tabel MySQL, astfel, pot fi toate definite intr-o functie.
<?php // Datele de conectare (adresa_server, baza_de_date, nume si parola) $hostdb = 'localhost'; $namedb = 'teste'; $userdb = 'username'; $passdb = 'password'; try { // Conectare si creare obiect PDO $dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb); $dbh->exec("SET CHARACTER SET utf8"); // Setare encoding caractere UTF-8 // Selectare date din MySQL, unde "id" este 3 $sql = "SELECT `id`, `adresa` FROM `sites` WHERE `id`=3"; $datas = $dbh->query($sql, PDO::FETCH_OBJ); // Aplicare query() cu un mod-fetch // Se parcurg datele while($row = $datas->fetch()) { echo $row->id. '-'. $row->adresa. '<br />'; // Afiseaza datele din coloanele "id" si "adresa" } $dbh = null; // Deconectare } catch(PDOException $e) { echo $e->getMessage(); } ?>- In browser apare:
Daca metoda fetch() este apelata fara argumente si la "query()" nu e specificat vreun tip FETCH_, modul implicit (default) este PDO::FETCH_BOTH.
- O alta metoda prin care se poate seta modul FETCH_ default este setFetchMode().
Ex.:
$datas = $dbh->query($sql);
$datas->setFetchMode (PDO::FETCH_OBJ);
while($row = $datas->fetch()) { // ... }
- Mai multe detalii la pagina oficiala setFetchMode
<table><tr> <th>Title 1</th> <th>Title 2</th> </tr></table>
.some_class { line-height: 150%; }
document.getElementById("id_button").onclick = function(){ window.open("http://coursesweb.net/"); }
$ar_dir = scandir("dir_name"); var_export($ar_dir);
He will sleep there. - El va dormi acolo.
Él dormirá allí. - El va dormi acolo.