Базите данни са навсякъде и няма практическо PHP приложение, което би могло да съществува без база данни. От самото начало PHP предлага няколко начина за взаимодействие с всички популярни СУБД. Например, два популярни начина за взаимодействие с базирани на MySQL бази данни са mysql и mysqli.
С годините базите данни изминаха дълъг път и сега няколко различни доставчици предлагат популярни СУБД, които захранват съвременните PHP приложения. За да стандартизира и рационализира практиките за разработка, PHP въведе PHP Data Objects (PDO) в PHP 5.1. Тези обекти се използват за настройка на PDO връзки към базата данни.
PDO е слой за достъп до база данни, който осигурява бърз и последователен интерфейс за достъп и управление на бази данни в PHP приложения. Всяка СУБД има специфични PDO драйвери, които трябва да бъдат инсталирани, когато използвате PDO в PHP приложения.
Поддържани бази данни
Име на драйвериПоддържана база данни
| PDO_CUBRID | Cubrid |
| PDO_DBLIB | FreeTDS / Microsoft SQL Server / Sybase |
| PDO_FIREBIRD | Firebird |
| PDO_IBM | IBM DB2 |
| PDO_INFORMIX | IBM Informix Dynamic Server |
| PDO_MYSQL | MySQL 3.x/4.x/5.x |
| PDO_OCI | Интерфейс за повикване на Oracle |
| PDO_ODBC | ODBC v3 (IBM DB2, unixODBC и win32 ODBC) |
| PDO_PGSQL | PostgreSQL |
| PDO_SQLITE | SQLite 3 и SQLite 2 |
| PDO_SQLSRV | Microsoft SQL Server / SQL Azure |
| PDO_4D | 4D |
По подразбиране PHP има инсталиран PDO_SQLite драйвер. Въпреки това, ако искате да работите с други бази данни, първо трябва да инсталирате съответния драйвер.
за да проверите какви драйвери са инсталирани във вашата система, създайте нов PHP файл и добавете следния кодов фрагмент към него:
<?php print_r(PDO::getAvailableDrivers()); ?>
Работа с PDO
PDO заменя всички предишни подходи за взаимодействие с база данни. Използвайки PDO, можете лесно да изпълнявате CRUD и свързани DBMS операции. Всъщност PDO действа като слой, който разделя операциите, свързани с базата данни от останалата част от кода.
Може да ви хареса още: Прост CRUD в PHP и MySQL
Свързване
Едно от най-важните предимства на PDO е простата и много ясна свързаност с база данни. Помислете за следния кодов фрагмент, който се използва за настройка на връзки с базата данни. Имайте предвид, че когато основната СУБД се промени, единствената промяна, която трябва да направите, е типът на базата данни.
<?php
Class Connection {
private $server = "mysql:host=localhost;dbname=cloudways";
private $user = "root";
private $pass = "";
private $options = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,);
protected $con;
public function openConnection()
{
try
{
$this->con = new PDO($this->server, $this->user,$this->pass,$this->options);
return $this->con;
}
catch (PDOException $e)
{
echo "There is some problem in connection: " . $e->getMessage();
}
}
public function closeConnection() {
$this->con = null;
}
}
?>
В горния кодов фрагмент забележете, че СУБД е MySQL. Ако обаче СУБД се промени на MS SQL Server, единствената промяна ще бъде замяната на mysql сmssql.
Забележка: PDO може да обработва изключения. Затова винаги обгръщайте работата му в блок за изпробване и хващане.
Спрете да губите време на сървъри
Cloudways се занимава с управлението на сървъра вместо вас, за да можете да се съсредоточите върху създаването на страхотни приложения и да поддържате клиентите си щастливи.
Стартирайте безплатноСъздаване на таблица с PDO
За да създадете таблица, първо декларирайте низ за заявка и след това го изпълнете с exec функция, тъй като няма да бъдат върнати данни.
<?php
include_once 'connection.php';
try
{
$database = new Connection();
$db = $database->openConnection();
// sql to create table
$sql = "CREATE TABLE `Student` ( `ID` INT NOT NULL AUTO_INCREMENT , `name`VARCHAR(40) NOT NULL , `last_ame` VARCHAR(40) NOT NULL , `email` VARCHAR(40)NOT NULL , PRIMARY KEY (`ID`)) ";
// use exec() because no results are returned
$db->exec($sql);
echo "Table Student created successfully";
$database->closeConnection();
}
catch (PDOException $e)
{
echo "There is some problem in connection: " . $e->getMessage();
}
?> Вмъкване на данни с PDO
За да вмъкнете данни в таблица с помощта на PDO, първо подгответе заявката с помощта на prepare изявление. След това тази заявка се изпълнява с изпълни функция. Имайте предвид, че тази практика предотвратява атаки с инжектиране на SQL.
<?php
include_once 'connection.php';
try
{
$database = new Connection();
$db = $database->openConnection();
// inserting data into create table using prepare statement to prevent from sql injections
$stm = $db->prepare("INSERT INTO student (ID,name,last_name,email) VALUES ( :id, :name, :lastname, :email)") ;
// inserting a record
$stm->execute(array(':id' => 0 , ':name' => 'Saquib' , ':lastname' => 'Rizwan' , ':email' => 'example@sqldat.com'));
echo "New record created successfully";
}
catch (PDOException $e)
{
echo "There is some problem in connection: " . $e->getMessage();
}
?> Изберете данни с PDO
За да изберете данни, първо създайте низ за заявка и след това го изпълнете в за всеки цикъл за извличане на записи от таблицата.
<?php
include_once 'connection.php';
try
{
$database = new Connection();
$db = $database->openConnection();
$sql = "SELECT * FROM student " ;
foreach ($db->query($sql) as $row) {
echo " ID: ".$row['ID'] . "<br>";
echo " Name: ".$row['name'] . "<br>";
echo " Last Name: ".$row['last_name'] . "<br>";
echo " Email: ".$row['email'] . "<br>";
}
}
catch (PDOException $e)
{
echo "There is some problem in connection: " . $e->getMessage();
}
?> Актуализиране на данните с PDO
За да актуализирате запис в таблицата, първо декларирайте низ на заявка и след това го изпълнете с exec функция.
<?php
include_once 'connection.php';
try
{
$database = new Connection();
$db = $database->openConnection();
$sql = "UPDATE `student` SET `name`= 'yourname' , `last_name` = 'your lastname' , `email` = 'your email' WHERE `id` = 8" ;
$affectedrows = $db->exec($sql);
if(isset($affectedrows))
{
echo "Record has been successfully updated";
}
}
catch (PDOException $e)
{
echo "There is some problem in connection: " . $e->getMessage();
}
?> Изтриване на данни с PDO
За да изтриете запис от таблицата, първо декларирайте низ на заявка и след това го изпълнете с exec функция.
<?php
include_once 'connection.php';
try
{
$database = new Connection();
$db = $database->openConnection();
$sql = "DELETE FROM student WHERE `id` = 8" ;
$affectedrows = $db->exec($sql);
if(isset($affectedrows))
{
echo "Record has been successfully deleted";
}
}
catch (PDOException $e)
{
echo "There is some problem in connection: " . $e->getMessage();
}
?> Заключение
PDO е слоят за достъп до данни, който значително улеснява процеса на свързване и работа с бази данни. Може би най-доброто нещо за PDO е рационализираният процес на миграция на база данни. Ако искате да ускорите своите PDO заявки с итератори, вижте тази статия от Микеланджело ван Дам.
В тази статия представих PDO и подчертах как можете да изпълнявате CRUD действия, използвайки PDO в PHP. Също така демонстрирах настройка на връзки към база данни на PDO. Ако имате въпроси или искате да добавите към дискусията, оставете коментар по-долу.