PDO (PHP Data Objects) este o extensie PHP pentru accesare baze de date in PHP.
PDO foloseste caracteristicile OOP (Programare Orientata pe Obiecte) valabile incepand cu PHP 5.1.
Deoarece PDO lucreaza cu clase si obiecte, trebuie sa fiti familiarizati cu modul de lucru al programarii orientate pe obiecte.
PDO poate lucra cu urmatoarele tipuri de baze de date:

- Unul din avantajele PDO este acela ca se folosesc functii similare pentru interogarea si prelucrarea bazelor de date, indiferent de tipul lor (din cele mentionate mai sus).
Script-urile care folosesc interfata PDO pentru conectare la baza de date efectueaza in general urmatoarele operatii:
  1. Conectare la serverul bazei de date, prin apelare new PDO(), obtinand un obiect pentru lucru cu acea baza de date.
  2. Aplicare functii specifice PDO pt. efectuarea interogarilor la baza de date.
  3. Retinerea si prelucrarea datelor returnate.
  4. Deconectarea de la server.
- Pentru a vedea daca PDO este valabil pentru baza dv. de date, se poate verifica cu phpinfo(), unde e o sectiune PDO, sau cu metoda PDO::getAvailableDrivers()
foreach(PDO::getAvailableDrivers() as $driver) {
  echo $driver.'
'; }

1. Conectare la baza de date

Orice interactiune cu o baza de date incepe prin conectarea la ea. In functie de tipul bazei de date se face intai conectarea, prin crearea unei instante de obiect cu new PDO(). Dupa conectare se aplica metodele PDO pentru retinerea si prelucrarea datelor, care in mare parte sunt aceleasi, indiferent de baza de date conectata. Iata cum se face conectarea la cateva din acestea:

Conectare la MySQL

<?php
// Datele de conectare (adresa_server, baza_de_date, nume si parola)
$hostdb = 'localhost';
$namedb = 'numebd';
$userdb = 'username';
$passdb = 'password';

// Afiseaza mesaj daca s-a reusit conectarea, altfel, retine eventuala eroare
try {
  $dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
  echo 'Connected to database';
}
catch(PDOException $e) {
  echo $e->getMessage();
}
?>
- In variabila $dbh se creaza obiectul PDO in care vor fi stocate datele transmise de la serverul MySQL. La aceasta instanta de obiect vor fi aplicate metodele pentru prelucrarea datelor.
Observati ca s-a folosit formula try() ... catch(), aceasta pentru a nu expune datele de conectare in cazul vreunei erori.
        - De exemplu, folosind aceasta tehnica, daca numele bazei de date este incorect, returneaza ceva de genul:
SQLSTATE[42000] [1049] Unknown database 'numebd'
        - Daca numele sau parola sunt gresite, afiseaza ceva similar cu:
SQLSTATE[28000] [1045] Access denied for user 'numele'@'localhost' (using password: YES)
Dar, daca s-ar folosi direct:
<?php
// Datele de conectare (adresa_server, baza_de_date, nume si parola)
$hostdb = 'localhost';
$namedb = 'numebd';
$userdb = 'username';
$passdb = 'password';

$dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
?>
        - Mesajul de eroare ar expune mai multe date, inclusiv parola, dupa cum se vede mai jos:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[28000] [1045] Access denied for user 'numele'@'localhost' (using password: YES)' in E:\server\www\zzz.php:14 Stack trace: #0 E:\server\www\zzz.php(14): PDO->__construct('mysql:host=loca...', 'numele', 'parola') #1 {main} thrown in E:\server\www\zzz.php on line 7
Deci, este indicata aplicarea formulei try() ... catch().

Conectare PostgreSQL

<?php
try {
  $dbh = new PDO("pgsql:host=localhost port=5432 dbname=pdo", "username", "password");
  echo "PDO connection object created";
}
catch(PDOException $e) {
  echo $e->getMessage();
}
?>

Conectare la SQLite

Cand PDO e folosit cu SQLite, trebuie specificata doar calea catre fisierul cu baza de date. Daca acesta nu exista, va incerca sa-l creeze.
<?php
try {
  // connect to SQLite database
  $dbh = new PDO("sqlite:/path/to/database.sdb");
}
catch(PDOException $e) {
  echo $e->getMessage();
}
?>

Conectare la Firebird

Firebird este o baza de date folosita pe Windows.
<?php
try {
  $dbh = new PDO("firebird:dbname=localhost:C:\Programs\Firebird\DATABASE.FDB", "SYSDBA", "masterkey");
}   
catch (PDOException $e) {
  echo $e->getMessage();
}
?>

Conectare la Informix

<?php
try {
  $dbh = new PDO("informix:DSN=InformixDB", "username", "password");
}
catch (PDOException $e) {
  echo $e->getMessage();
}
?>

Conectare la Oracle

<?php
try {
  $dbh = new PDO("OCI:dbname=accounts;charset=UTF-8", "username", "password")
}
catch (PDOException $e) {
  echo $e->getMessage();
}
?>

Conectare la ODBC

Exista mai multe conexiuni ODBC care pot fi create. Iata conectarea la o baza de date MS Access, numita "accounts".
<?php
try {
  $dbh = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\accounts.mdb;Uid=Admin");
}
catch (PDOException $e) {
  echo $e->getMessage();
}
?>

Conectare la DBLIB

O alta baza de date specifica Windows.
<?php
$hostdb = "localhost";
$port   = 10060;
$namedb   = "my_database";
$userdb = "username";
$passdb = "password";

try {
  $dbh = new PDO ("dblib:host=$hostdb:$port;dbname=$namedb","$userdb","$passdb");
}
catch (PDOException $e) {
  echo $e->getMessage();
}
?>

Conectare la IBM

Urmatorul exemplu arata conectarea la o baza de date IBM DB2 numita "accounts".
<?php
try {
  $db = new PDO("ibm:DRIVER={IBM DB2 ODBC DRIVER};DATABASE=accounts; HOSTNAME=1.2.3,4;PORT=56789;PROTOCOL=TCPIP;", "username", "password");
}
catch (PDOException $e) {
  echo $e->getMessage();
}
?>

2. Inchiderea conexiunii cu baza de date

In mod normal, PHP inchide conexiunea la baza de date dupa ce a fost executat tot scriptul. Dar deconectarea se poate face si intentionat, atribuind valoare null la obiectul PDO, dupa cum e prezentat in exemplu de mai jos.
Instanta la acel obiect va fi distrusa, prin urmare, aceasta metoda trebuie adaugata dupa ce au fost scrise toate instructiunile care trebuie aplicate obiectului PDO.
    - Deconectarea prin aceasta metoda este utila deoarece elibereaza memoria folosita.

<?php
// Datele de conectare (adresa_server, baza_de_date, nume si parola)
$hostdb = 'localhost';
$namedb = 'numebd';
$userdb = 'username';
$passdb = 'password';

// Afiseaza mesaj daca s-a reusit conectarea, altfel, retine eventuala eroare
try {
  $dbh = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
  echo 'Connected to database';
	   /* Instructiuni de lucru cu $dbh */

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

In tutorialul urmator e prezentat modul de creare si adaugare date in tabel MySQL, INSERT, UPDATE si DELETE folosind metoda PDO exec().

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 Introducere Conectari la Baze de Date

Last accessed pages

  1. Conditional (845)
  2. Conditional IF in Limba Engleza - Fraze Conditionale (34846)
  3. Verbele regulate 3 (1750)
  4. CSS3 opacity (280)
  5. Verbe la indicativ, cu forma yo neregulata (430)

Popular pages this month

  1. Gramatica limbii engleze - Prezentare Generala (2235)
  2. Conditional IF in Limba Engleza - Fraze Conditionale (1222)
  3. Creare si editare pagini HTML (1102)
  4. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (1084)
  5. Curs HTML gratuit Tutoriale HTML5 (946)