Administrarea conexiunilor
Conexiunile sunt stabilite prin crearea instanţelor clasei PDO. Nu contează ce driver va fi folosit, pentru că întotdeauna va fi folosit acelaşi nume de clasă PDO. Constructorul acceptă parametri pentru specificarea sursei bazei de date (cunoscut ca DSN) şi opţional, pentru nume utilizator şi parolă (dacă există).
Exemplu de conectare la MySQL
<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
?>
Dacă sunt erori la conectare, va fi lansat un obiect PDOException. Excepţia poate fi capturată ăn vederea prelucrării ei, sau poate fi lăsată pentru o aplicaţie setată via set_exception_handler().
Exemplu de prelucrare a erorilor de conectare
<?php
try {
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
foreach ($dbh->query('SELECT * from FOO') as $row) {
print_r($row);
}
$dbh = null;
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
?>
Atenţie
Dacă aplicaţia nu capturează excepţia lansată de constructorul PDO, acţiunea implicită realizată de motorul zend este de a termina programul şi de a afişa informaţii despre detaliile conexiunii la baza de date, inclusiv numele utilizatorului şi parola. Capturarea excepţiei se poate face fie explicit (cu o instrucţiune catch) sau implicit, cu set_exception_handler().
După conectarea cu succes la baza de date, este întoarsă o instanţă a clasei PDO. Conexiunea rămâne activă atât timp cât există obiectul PDO. Pentru a închide conexiunea, trebuie distrus obiectul şi şterse toate referinţele la acesta – acest lucru se face prin atribuirea valorii NULL variabilei care conţine acel obiect. Dacă acest lucru nu se face explicit, PHP închide automat conexiunea la terminarea programului.
Exemplu de închidere a conexiunii
<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
// aici se foloseste conexiunea
// dupa terminare, aceasta se inchide
$dbh = null;
?>
Multe aplicaţii web au beneficii din realizarea de conexiuni persistente la serverele bazei de date. Conexiunile persistente nu sunt închise la sfârşitul programului, ci sunt stocate în cache şi refolosite atunci când un alt program cere o conexiune, folosind aceiaşi parametri. Informaţiile din cache pentru conexiunea persistentă permit evitarea stabilirii unei conexiuni noi de fiecare dată când programul trebuie să comunice cu baza de date, astfel rezultând o aplicaţie mai rapidă.
Exemplu de conexiuni persistente
<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(
PDO::ATTR_PERSISTENT => true
));
?>
Notă: Dacă se foloseşte driverul PDO ODBC şi bibliotecile ODBC suportate de ODBC Connection Pooling (unixODBC, Windows…), se recomandă să nu se folosească conexiuni persistente PDO, iar informaţia din cache despre conexiune să fie lăsată în ODBC Connection Pooling. ODBC Connection Pool este partajat cu alte module din proces; dacă PDO este informat să pună datele conexiunii în cache, atunci acea conexiune nu va fi întoarsă niciodată de ODBC connection pool, rezultând în conexiuni suplimentare create pentru a deservi aceste alte module.