Limbajul PHP. Conectarea la baza de date cu PDO

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’;,
)

 

prof. Cătălina Enescu

Liceul Teoretic Ion Cantacuzino, Piteşti (Argeş) , România
Profil iTeach: iteach.ro/profesor/catalina.enescu

Articole asemănătoare