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' => '[email protected]')); 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.