Bazy danych są wszędzie i nie ma praktycznej aplikacji PHP, która mogłaby istnieć bez bazy danych. Od samego początku PHP oferuje kilka sposobów współpracy ze wszystkimi popularnymi DBMS. Na przykład dwa popularne sposoby łączenia się z bazami danych opartymi na MySQL to mysql i mysqli.
Przez lata bazy danych przeszły długą drogę, a teraz kilku różnych dostawców oferuje popularne DBMS, które obsługują nowoczesne aplikacje PHP. Aby ujednolicić i usprawnić praktyki programistyczne, PHP wprowadziło PHP Data Objects (PDO) w PHP 5.1. Obiekty te służą do konfigurowania połączeń z bazą danych PDO.
PDO to warstwa dostępu do bazy danych, która zapewnia szybki i spójny interfejs dostępu do baz danych i zarządzania nimi w aplikacjach PHP. Każdy DBMS ma określony sterownik PDO, który należy zainstalować, gdy używasz PDO w aplikacjach PHP.
Obsługiwane bazy danych
Nazwa sterownikaObsługiwana baza danych
| 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 | Interfejs Oracle Call |
| PDO_ODBC | ODBC v3 (IBM DB2, unixODBC i win32 ODBC) |
| PDO_PGSQL | PostgreSQL |
| PDO_SQLITE | SQLite 3 i SQLite 2 |
| PDO_SQLSRV | Microsoft SQL Server / SQL Azure |
| PDO_4D | 4D |
Domyślnie PHP ma zainstalowany sterownik PDO_SQLite. Jeśli jednak chcesz pracować z innymi bazami danych, musisz najpierw zainstalować odpowiedni sterownik.
aby sprawdzić, jakie sterowniki są zainstalowane w Twoim systemie, utwórz nowy plik PHP i dodaj do niego następujący fragment kodu:
<?php print_r(PDO::getAvailableDrivers()); ?>
Praca z PDO
PDO zastępuje wszystkie poprzednie podejścia do interakcji z bazą danych. Używając PDO, możesz łatwo wykonać CRUD i powiązane operacje DBMS. W efekcie PDO działa jak warstwa, która oddziela operacje związane z bazą danych od reszty kodu.
Możesz też chcieć: Proste CRUD w PHP i MySQL
Łączność
Jedną z najważniejszych zalet PDO jest prosta i bardzo bezpośrednia łączność z bazą danych. Rozważmy następujący fragment kodu, który służy do konfigurowania połączeń z bazą danych. Zwróć uwagę, że kiedy bazowy DBMS ulegnie zmianie, jedyną zmianą, jaką musisz wprowadzić, jest typ bazy danych.
<?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;
}
}
?>
W powyższym fragmencie kodu zauważ, że DBMS to MySQL. Jeśli jednak DBMS zmieni się na MS SQL Server, jedyną zmianą będzie zastąpienie mysql z mssql.
Uwaga: PDO może obsługiwać wyjątki. Dlatego zawsze owijaj jego działanie w blok try-and-catch.
Przestań marnować czas na serwery
Cloudways zajmuje się zarządzaniem serwerem za Ciebie, dzięki czemu możesz skupić się na tworzeniu świetnych aplikacji i dbaniu o zadowolenie klientów.
Zacznij bezpłatnieTworzenie tabeli z PDO
Aby utworzyć tabelę, najpierw zadeklaruj ciąg zapytania, a następnie wykonaj go za pomocą exec funkcja, ponieważ żadne dane nie zostaną zwrócone.
<?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();
}
?> Wstawianie danych z PDO
Aby wstawić dane do tabeli za pomocą PDO, najpierw przygotuj zapytanie za pomocą przygotuj oświadczenie. Następnie to zapytanie jest wykonywane z wykonaniem funkcjonować. Pamiętaj, że ta praktyka zapobiega atakom typu SQL injection.
<?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();
}
?> Wybierz dane z PDO
Aby wybrać dane, najpierw utwórz ciąg zapytania, a następnie wykonaj go w dla każdego pętla, aby pobrać rekordy z tabeli.
<?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();
}
?> Aktualizuj dane za pomocą PDO
Aby zaktualizować rekord w tabeli, najpierw zadeklaruj ciąg zapytania, a następnie wykonaj go za pomocą exec funkcja.
<?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();
}
?> Usuń dane za pomocą PDO
Aby usunąć rekord z tabeli, najpierw zadeklaruj ciąg zapytania, a następnie wykonaj go za pomocą exec funkcja.
<?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();
}
?> Wniosek
PDO to warstwa dostępu do danych, która znacznie ułatwia proces łączenia i pracy z bazami danych. Być może najlepszą rzeczą w PDO jest usprawniony proces migracji bazy danych. Jeśli chcesz przyspieszyć zapytania PDO za pomocą iteratorów, zapoznaj się z tym artykułem autorstwa Michelangelo van Dam.
W tym artykule przedstawiłem PDO i podkreśliłem, w jaki sposób można wykonywać akcje CRUD za pomocą PDO w PHP. Zademonstrowałem również konfigurowanie połączeń z bazą danych PDO. Jeśli masz pytania lub chcesz dodać do dyskusji, zostaw komentarz poniżej.