Databases zijn overal en er is geen praktische PHP-toepassing die zou kunnen bestaan zonder een database. Vanaf het allereerste begin biedt PHP verschillende manieren om te communiceren met alle populaire DBMS. Twee populaire manieren om te communiceren met op MySQL gebaseerde databases zijn bijvoorbeeld mysql en mysqli.
In de loop der jaren hebben databases een lange weg afgelegd en nu bieden verschillende leveranciers populaire DBMS aan voor moderne PHP-apps. Om ontwikkelpraktijken te standaardiseren en te stroomlijnen, heeft PHP PHP Data Objects (PDO) geïntroduceerd in PHP 5.1. Deze objecten worden gebruikt om PDO-databaseverbindingen in te stellen.
PDO is een databasetoegangslaag die een snelle en consistente interface biedt voor toegang tot en beheer van databases in PHP-applicaties. Elke DBMS heeft specifieke PDO-stuurprogramma('s) die moeten worden geïnstalleerd wanneer u PDO in PHP-toepassingen gebruikt.
Ondersteunde databases
Naam stuurprogramma Ondersteunde 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 en win32 ODBC) |
PDO_PGSQL | PostgreSQL |
PDO_SQLITE | SQLite 3 en SQLite 2 |
PDO_SQLSRV | Microsoft SQL Server / SQL Azure |
PDO_4D | 4D |
Standaard heeft PHP het PDO_SQLite-stuurprogramma geïnstalleerd. Als u echter met andere databases wilt werken, moet u eerst het betreffende stuurprogramma installeren.
om te controleren welke stuurprogramma's op uw systeem zijn geïnstalleerd, maakt u een nieuw PHP-bestand en voegt u er het volgende codefragment aan toe:
<?php print_r(PDO::getAvailableDrivers()); ?>
Werken met BOB
PDO vervangt alle eerdere benaderingen van database-interactie. Met PDO kunt u gemakkelijk CRUD- en gerelateerde DBMS-bewerkingen uitvoeren. In feite fungeert PDO als een laag die databasegerelateerde bewerkingen scheidt van de rest van de code.
Misschien vind je dit ook leuk: Eenvoudige CRUD in PHP en MySQL
Connectiviteit
Een van de belangrijkste voordelen van PDO is de eenvoudige en zeer ongecompliceerde databaseconnectiviteit. Overweeg het volgende codefragment dat wordt gebruikt om verbindingen met de database tot stand te brengen. Merk op dat wanneer het onderliggende DBMS verandert, de enige wijziging die u hoeft aan te brengen het databasetype is.
<?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; } } ?>
Merk in het bovenstaande codefragment op dat het DBMS MySQL is. Als het DBMS echter verandert in MS SQL Server, is de enige verandering de vervanging van mysql met mssql.
Opmerking: PDO kan uitzonderingen aan. Wikkel daarom de bewerking altijd in een try and catch-blok.
Stop met het verspillen van tijd aan servers
Cloudways regelt het serverbeheer voor u, zodat u zich kunt concentreren op het maken van geweldige apps en het tevreden houden van uw klanten.
Begin gratisEen tabel maken met PDO
Om een tabel te maken, declareert u eerst een queryreeks en voert u deze vervolgens uit met exec functie omdat er geen gegevens worden geretourneerd.
<?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(); } ?>
Gegevens invoegen met PDO
Om gegevens in een tabel in te voegen met behulp van PDO, bereidt u eerst de query voor met behulp van prepare uitspraak. Vervolgens wordt deze query uitgevoerd met de execute functie. Merk op dat deze praktijk SQL-injectie-aanvallen voorkomt.
<?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(); } ?>
Selecteer gegevens met PDO
Om gegevens te selecteren, maakt u eerst een queryreeks en voert u deze vervolgens uit in een voor elk loop om records uit de tabel op te halen.
<?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(); } ?>
Gegevens bijwerken met BOB
Om een record in de tabel bij te werken, declareert u eerst een queryreeks en voert u deze vervolgens uit met exec functie.
<?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(); } ?>
Gegevens verwijderen met PDO
Om een record uit de tabel te verwijderen, declareert u eerst een queryreeks en voert u deze vervolgens uit met exec functie.
<?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(); } ?>
Conclusie
PDO is de gegevenstoegangslaag die het proces van verbinding maken met en werken met databases aanzienlijk vereenvoudigt. Misschien is het beste aan PDO het gestroomlijnde proces van databasemigratie. Als je je BOB-query's met iterators wilt versnellen, bekijk dan dit artikel van Michelangelo van Dam.
In dit artikel heb ik PDO geïntroduceerd en benadrukt hoe je CRUD-acties kunt uitvoeren met PDO in PHP. Ik demonstreerde ook het opzetten van PDO-databaseverbindingen. Als je vragen hebt of iets wilt toevoegen aan de discussie, laat dan hieronder een reactie achter.