Ce este PDO? Este abrevierea de la PHP Data Object. O extensie a limbajului PHP (începând cu versiunea 5.1) care oferă o alternativă de lucru cu bazele de date.
De ce sa folosim PDO?
Portabilitate. Lucreaza cu mai multe SGBD-uri (Sistem de Gestiune a Bazelor de Date): MySQL, PostgreSQL, SQLite, Oracle, Microsoft SQL Server, etc.
Flexibilitate. Daca am folosit PDO intr-un proiect si vreau sa schimb SGBD-ul, pot face asta schimband o singura linie de cod.
Viteza. PDO este o librarie scrisa in C/C++, limbaj compilat, nu interpretat precum PHP.
Exemplu de realizare a conexiunii cu o baza de date MySQL
Crearea bazei de date
Se va crea baza de date mydb, apoi tabelul users. Pentru crearea tabelului se poate executa codul SQL de mai jos:
MySQL
CREATE TABLE IF NOT EXISTS `users` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`first_name` varchar(30) NOT NULL,
`last_name` varchar(30) NOT NULL,
`email` varchar(60) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`)
);
CREATE TABLE IF NOT EXISTS `users` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`first_name` varchar(30) NOT NULL,
`last_name` varchar(30) NOT NULL,
`email` varchar(60) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`)
);
Popularea bazei de date
Se vor adauga cateva inregistrari in tabelul users. Se poate executa codul SQL de mai jos.
MySQL
INSERT INTO `users` (`id`, `first_name`, `last_name`, `email`) VALUES
(1, ‘Mihai’, ‘Popa’, ‘mpopa@gmail.com’;),
(2, ‘Ana’, ‘Ionescu’, ‘aionescu@gmail.com’;),
(3, ‘Stefan’, ‘Albescu’, ‘salbescu@gmail.com’;);
INSERT INTO `users` (`id`, `first_name`, `last_name`, `email`) VALUES
(1, ‘Mihai’, ‘Popa’, ‘mpopa@gmail.com’;),
(2, ‘Ana’, ‘Ionescu’, ‘aionescu@gmail.com’;),
(3, ‘Stefan’, ‘Albescu’, ‘salbescu@gmail.com’;);
PDO. Conectarea la baza de date
Crearea unui obiect PDO
PHP
$pdo = new PDO(„mysql:host=myhost;dbname=mydb”,”myuser”,”mypassword”);
$pdo = new PDO(„mysql:host=myhost;dbname=mydb”,”myuser”,”mypassword”);
myhost, mydb, myuser, mypassword se vor inlocui cu valori concrete reprezentand numele serverului, numele bazei de date, utilizatorul si parola cu care accesez baza de date.
Creare obiectului PDO pentru baza noatra de date
PHP
$pdo = new PDO(„mysql:host=localhost;dbname=mydb”,”root”,””);
$pdo = new PDO(„mysql:host=localhost;dbname=mydb”,”root”,””);
- baza de date se afla pe serverul localhost
- numele bazei de date este mydb
- baza de date poate fi accesata cu utilizatorul root, fara parola
- daca datele sunt corecte si este permis accesul la server, se realizeaza conexiunea la baza de date; altfel se transmite un mesaj de eroare
Tratarea erorilor
Daca nu va reusit conexiunea, se va genera un mesaj de eroare.
PHP
$pdo = new PDO(„mysql:host=localhost;dbname=mydb”,”root”,”d”);
$pdo = new PDO(„mysql:host=localhost;dbname=mydb”,”root”,”d”);
Fatal error: Uncaught exception ‘PDOException’ with message…
Mai jos este exemplificata una dintre modalitatile in care poate fi controlat mesajul de eroare:
PHP
try{
$pdo = new PDO(„mysql:host=localhost;dbname=mydb”,”root”,”d”);
}catch(PDOException $e) {
echo „<p>ERROR: „.$e->getMessage().” </p>”;
}
try{
$pdo = new PDO(„mysql:host=localhost;dbname=mydb”,”root”,”d”);
}catch(PDOException $e) {
echo „<p>ERROR: „.$e->getMessage().” </p>”;
}
La datele de conectare am specificat parola pe root. Va rezulta o eroare la conectare. Mesajul de eroare este acum controlat:
ERROR: SQLSTATE[HY000] [1045] Access denied for user ‘root’@’localhost’ (using password: YES)
PDO. Un SELECT simplu asupra bazei de date
PHP
try{
// creez obiectul
$pdo = new PDO(„mysql:host=localhost;dbname=mydb”,”root”,””);
// scriu comanda SQL
$sql = „SELECT first_name,last_name,email FROM users”;
// execut comanda SQL
$result = $pdo->query($sql) or die(„FAILED!”);
// parcurg inregistrarile rezultate si le afisez
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
echo „<pre>”.var_export($row,true).”</pre>”;
}
// distrug obiectul
unset($pdo);
}catch(PDOException $e) { // transmit mesajul de eroare
echo „<p>ERROR: „.$e->getMessage().” </p>”;
}
try{
// creez obiectul
$pdo = new PDO(„mysql:host=localhost;dbname=mydb”,”root”,””);
// scriu comanda SQL
$sql = „SELECT first_name,last_name,email FROM users”;
// execut comanda SQL
$result = $pdo->query($sql) or die(„FAILED!”);
// parcurg inregistrarile rezultate si le afisez
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
echo „<pre>”.var_export($row,true).”</pre>”;
}
// distrug obiectul
unset($pdo);
}catch(PDOException $e) { // transmit mesajul de eroare
echo „<p>ERROR: „.$e->getMessage().” </p>”;
}
In browser:
array (
‘id’ => ‘1’,
‘first_name’ => ‘Mihai’,
‘last_name’ => ‘Popa’,
‘email’ => ‘mpopa@gmail.com’;,
)
array (
‘id’ => ‘2’,
‘first_name’ => ‘Ana’,
‘last_name’ => ‘Ionescu’,
‘email’ => ‘aionescu@gmail.com’;,
)
array (
‘id’ => ‘3’,
‘first_name’ => ‘Stefan’,
‘last_name’ => ‘Albescu’,
‘email’ => ‘salbescu@gmail.com’;,
)
array (
‘id’ => ‘1’,
‘first_name’ => ‘Mihai’,
‘last_name’ => ‘Popa’,
‘email’ => ‘mpopa@gmail.com’;,
)
array (
‘id’ => ‘2’,
‘first_name’ => ‘Ana’,
‘last_name’ => ‘Ionescu’,
‘email’ => ‘aionescu@gmail.com’;,
)
array (
‘id’ => ‘3’,
‘first_name’ => ‘Stefan’,
‘last_name’ => ‘Albescu’,
‘email’ => ‘salbescu@gmail.com’;,
)