Databaser er overalt, og der er ingen praktisk PHP-applikation, der kunne eksistere uden en database. Helt fra begyndelsen tilbyder PHP flere måder at interface med alle populære DBMS. For eksempel er to populære måder at interface med MySQL-baserede databaser på mysql og mysqli.
Gennem årene er databaser kommet langt, og nu tilbyder flere forskellige leverandører populære DBMS, der driver moderne PHP-apps. For at standardisere og strømline udviklingspraksis introducerede PHP PHP Data Objects (PDO) i PHP 5.1. Disse objekter bruges til at opsætte PDO-databaseforbindelser.
PDO er et databaseadgangslag, som giver en hurtig og ensartet grænseflade til at få adgang til og administrere databaser i PHP-applikationer. Hvert DBMS har specifikke PDO-drivere, der skal installeres, når du bruger PDO i PHP-applikationer.
Understøttede databaser
DrivernavnUnderstøttet database
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 Call Interface |
PDO_ODBC | ODBC v3 (IBM DB2, unixODBC og win32 ODBC) |
PDO_PGSQL | PostgreSQL |
PDO_SQLITE | SQLite 3 og SQLite 2 |
PDO_SQLSRV | Microsoft SQL Server / SQL Azure |
PDO_4D | 4D |
Som standard har PHP PDO_SQLite driver installeret. Men hvis du ønsker at arbejde med andre databaser, skal du først installere den relevante driver.
for at kontrollere, hvilke drivere der er installeret på dit system, skal du oprette en ny PHP-fil og tilføje følgende kodestykke til den:
<?php print_r(PDO::getAvailableDrivers()); ?>
Arbejde med BOB
PDO erstatter alle tidligere databaseinteraktionstilgange. Ved at bruge PDO kan du nemt udføre CRUD og relaterede DBMS-operationer. Faktisk fungerer PDO som et lag, der adskiller databaserelaterede operationer fra resten af koden.
Du kan måske også lide: Simpel CRUD i PHP og MySQL
Forbindelse
En af de vigtigste fordele ved PDO er den enkle og meget ligetil databaseforbindelse. Overvej følgende kodestykke, der bruges til at oprette forbindelser til databasen. Bemærk, at når den underliggende DBMS ændres, er den eneste ændring, du skal foretage, databasetypen.
<?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; } } ?>
I ovenstående kodestykke skal du bemærke, at DBMS er MySQL. Men hvis DBMS ændres til MS SQL Server, vil den eneste ændring være erstatningen af mysql med mssql.
Bemærk: PDO kan håndtere undtagelser. Pak derfor altid dens funktion ind i en prøv-og-fang-blok.
Stop med at spilde tid på servere
Cloudways håndterer serveradministration for dig, så du kan fokusere på at skabe fantastiske apps og holde dine kunder glade.
Start gratisOprettelse af en tabel med PDO
For at oprette en tabel skal du først erklære en forespørgselsstreng og derefter udføre den med exec funktion, da ingen data vil blive returneret.
<?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(); } ?>
Indsættelse af data med PDO
For at indsætte data i en tabel ved hjælp af PDO skal du først forberede forespørgslen med forbered udmelding. Dernæst udføres denne forespørgsel med execute fungere. Bemærk, at denne praksis forhindrer SQL-injektionsangreb.
<?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(); } ?>
Vælg Data med PDO
For at vælge data skal du først oprette en forespørgselsstreng og derefter udføre den i en for hver sløjfe for at hente poster fra tabellen.
<?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(); } ?>
Opdater data med PDO
For at opdatere en post i tabellen skal du først erklære en forespørgselsstreng og derefter udføre den med exec funktion.
<?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(); } ?>
Slet data med PDO
For at slette en post fra tabellen skal du først erklære en forespørgselsstreng og derefter udføre den med exec funktion.
<?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(); } ?>
Konklusion
PDO er det dataadgangslag, der i høj grad letter processen med at forbinde og arbejde med databaser. Måske er det bedste ved PDO den strømlinede proces med databasemigrering. Hvis du vil fremskynde dine BOB-forespørgsler med iteratorer, så tjek denne artikel af Michelangelo van Dam.
I denne artikel introducerede jeg PDO og fremhævede, hvordan du kunne udføre CRUD-handlinger ved hjælp af PDO i PHP. Jeg demonstrerede også opsætning af PDO-databaseforbindelser. Hvis du har spørgsmål eller gerne vil tilføje til diskussionen, så læg en kommentar nedenfor.