Dupa ce se realizeaza cu succes conectarea la baza de date (aici MySQL) si se creaza instanta de obiect PDO, poate fi utilizata pentru executia de interogari SQL.
Interogarile SQL cu PDO pot fi facute in 2 moduri: direct (cu metodele "exec()" si "query()"), sau cu declaratiile prepare() ... execute().
Prima varianta e mai simpla si in aceasta lectie va fi prezentata metoda exec.

• Comenzile care modifica randuri din tabel, dar nu returneaza un set de rezultate cu randuri si coloane (INSERT, UPDATE), se transmit cu metoda exec(), aceasta returneaza numarul de randuri afectate, sau FALSE in caz de eroare.
                $count = $dbh->exec("Comanda SQL");
• Interogarile care selecteaza randuri (SELECT) si returneaza un set de rezultate cu randuri si coloane se transmit cu metoda query(). In caz de eroare da FALSE.
                $res = $dbh->query("Interogare SQL");

Pentru a lucra cu baze de date in PHP trebuie cunoscute interogarile specifice SQL, precum: CREATE TABLE, INSERT, SELECT, etc.
Cu PDO, PHP transmite aceste comenzi sub forma de sir la MySQL, daca nu le cunoasteti, sunt prezentate in lectiile despre baze de date SQL, incepand cu Baze de date SQL.

1. Creare tabel MySQL

Crearea unui tabel MySQL folosind PDO se face prin metoda "exec()" si instructiunea specifica SQL, "CREATE TABLE ...", sintaxa fiind:
                $obiectPDO->exec("CREATE TABLE `nume_tabel` (`coloana1` TIP, `coloana2` TIP, ...)");
- Toate aceste instructiuni se adauga dupa cea de creare a obiectului PDO si conectare la MySQL.


In exemplu urmator se creaza in baza de date "teste" un tabel denumit "sites", cu 4 coloane: "id", "nume", "categorie" si "adresa".
<?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

  // Creare tabel
  $sql = "CREATE TABLE `sites` (`id` int(8) NOT NULL AUTO_INCREMENT PRIMARY KEY , `nume` varchar(70) NOT NULL DEFAULT '', `categorie` varchar(25), `adresa` varchar(100)) CHARACTER SET utf8 COLLATE utf8_general_ci";
  if($dbh->exec($sql) !== false) echo 'Tabelul sites e creat';       // Daca rezultatul e diferit de false, afiseaza confirmare

  $dbh = null;        // Deconectare
}
catch(PDOException $e) {
  echo $e->getMessage();
}
?>
- Daca tabelul e creat, afiseaza:
Tabelul sites e creat
- Prin "exec("SET CHARACTER SET utf8")" seteaza ca transferul de date dintre PHP si serverul MySQL sa se faca in format de caractere UTF-8. Este indicata adaugarea acestei instructiuni cand se lucreaza cu date ce contin diacritice si caractere mai putin uzuale, dar in scriptul PHP trebuie aplicat si header-ul header('Content-type: text/html; charset=utf-8');.

2. INSERT

Dupa ce tabelul MySQL este creat, se pot adauga randuri cu date in el. Acest lucru se face cu instructiunea INSERT, prin metoda exec(). Sintaxa generala este:
        $obiectPDO->exec("INSERT INTO `nume_tabel` (`coloana1`, `coloana2`, ...) VALUES ('valoare1', 'valoare2', ...));


Iata cum se aplica.
<?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

  // Adaugare date
  $sql = "INSERT INTO `sites` (`nume`, `categorie`, `adresa`)
    VALUES
      ('Cursuri - Tutoriale', 'educatie', 'marplo.net'),
      ('Curs PHP-MySQL', 'programare', 'marplo.net/php-mysql'),
      ('Cursuri Engleza', 'limbi straine', 'marplo.net/engleza')";
  $count = $dbh->exec($sql);

  $dbh = null;        // Deconectare
}
catch(PDOException $e) {
  echo $e->getMessage();
}

// Daca datele au fost adaugate ($coun nu e false) afiseaza nr. randuri adaugate
if($count !== false) echo 'Nr. randuri adaugate: '. $count;
?>
- Acest cod adauga 3 randuri in tabelul "sites". Variabila $count retine numarul de randuri afectate (adaugate) si script-ul va afisa:
Nr. randuri adaugate: 3

Tabelul "sites" va 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     |

• Pentru a obtine ultimul "id" adaugat cu INSERT intr-o coloana AUTO_INCREMENT PRIMARY KEY, se foloseste metoda lastInsertId().
        - Atentie, cand sunt adaugate mai multe randuri in aceeasi instructiune INSERT, va returna id-ul primului rand adaugat (ca si cum se adauga un singur rand).

UPDATE si DELETE sunt instructiuni SQL care modifica date din tabel, dar nu returneaza un set de rezultate cu randuri si coloane, acestea (la fel ca INSERT) pot fi executate in PDO cu metoda exec().

3. UPDATE

Dupa ce sunt adaugate date in tabelul MySQL, acestea pot fi modificate cu instructiunea UPDATE. Formula generala aplicata cu PDO este:
                $obiectPDO ->exec("UPDATE `nume_tabel` SET `coloana1`='valoare1', `coloana2`='valoare2' WHERE conditie");


In urmatorul exemplu se modifica datele din coloanele "nume" si "adresa", unde "id" are valoarea 3, din tabelul "sites", creat mai sus.
<?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

  // Modificare date din coloanele "nume" si "adresa", unde id=3
  $sql = "UPDATE `sites` SET `nume`='Cursuri Spaniola', `adresa`='marplo.net/spaniola' WHERE `id`=3";
  $count = $dbh->exec($sql);

  $dbh = null;        // Deconectare
}
catch(PDOException $e) {
  echo $e->getMessage();
}

// Daca interogarea e facuta cu succes ($count diferit de false)
if($count !== false) echo 'Randuri afectate: '. $count;       // Afiseaza nr. randuri afectate
?>
- In browser va afisa:
Randuri afectate: 1

In unele situatii se poate ca UPDATE sa nu afecteze vreun rand si va returna 0. De aceea este indicata verificarea prin conditia if($count !== false).
- E gresit   if(!$count)

4. DELETE

Instructiunea DELETE sterge randuri din tabel. Formula generala aplicata cu PDO este:
                $obiectPDO ->exec("DELETE FROM `nume_tabel` WHERE conditie");


In urmatorul exemplu se sterg toate randurile din tabelul "sites" care au coloana "categorie" cu valoarea "educatie" sau "programare".
<?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

  // Stergere randuri in functie de campul "categorie"
  $sql = "DELETE FROM `sites` WHERE `categorie` IN('educatie', 'programare')";
  $count = $dbh->exec($sql);

  $dbh = null;        // Deconectare
}
catch(PDOException $e) {
  echo $e->getMessage();
}

// Daca interogarea e facuta cu succes ($count diferit de false)
if($count !== false) echo 'Randuri afectate: '. $count;       // Afiseaza nr. randuri afectate
?>
- In browser va afisa:
Randuri afectate: 2

- In lectia urmatoare sunt prezentate modul in care se poate selecta si prelua date din tabelul MySQL cu metoda PDO query().

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Ce tag HTML5 este indicat sa contina meniul cu link-uri de navigare in site?
<section> <nav> <article>
<nav><ul>
 <li><a href="http://coursesweb.net/css/" title="CSS Course">CSS Course</a></li>
 <li><a href="http://www.marplo.net/jocuri/" title="Flash Games">Flash Games</a></li>
</ul></nav>
Ce proprietate CSS muta elementrul in dreapta sau stanga de la locul unde e?
text-align clear float
.some_class {
  width: 30%;
  float: left;
}
Clic pe metoda obiectului Math care rotunjeste numarul x descrescator la cel mai apropiat intreg.
Math.ceil(x) Math.abs(x) Math.floor(x)
var num = 12.34567;
num = Math.floor(num);
alert(num);       // 12
Indicati functia PHP care returneaza numarul de caractere dintr-un sir.
mb_strlen() count() stristr()
$str = "sir cu caractere utf-8 åèö";
$nrchr = mb_strlen($str);
echo $nrchr;        // 29
Clic pe raspunsul potrivit la intrebarea: "When it happened?".
On the 7th of July 1996 It is a quarter to 5. Nice weather.
When it happened? On the 8th of August 2001.
- Cand s-a intamplat? Pe 8 August 2001.
Indicati raspunsul potrivit la intrebarea: "¿Cuando sucedió?".
Hace buen tiempo. En el 8 de Agosto de 2001 Son las tres menos cuarto.
¿Cuando sucedió? En el 8 de Agosto de 2001.
- Cand s-a intamplat? Pe 8 August 2001.
PHP PDO - exec INSERT UPDATE DELETE MySQL

Last accessed pages

  1. Butterfly Kyodai (5681)
  2. Zuma Deluxe (4247)
  3. HTML5 - Tag-uri Noi (128)
  4. Tutorial HTML5 (185)
  5. Titluri, Paragrafe, Un nou rand, Linie orizontala (829)

Popular pages this month

  1. Bubbles3 (3367)
  2. Gramatica limbii engleze - Prezentare Generala (3170)
  3. Prezentul simplu si continuu - Present Tense Simple and Continuous (2266)
  4. Butterfly Kyodai (2169)
  5. Trecutul simplu si continuu - Past Tense Simple and Continuous (1918)