When it comes to database operations in PHP, PDO provides a lot of advantages. PDO is a database access tool in PHP that enables uniform access across multiple databases, Error handling and security.
As a developer, I used the PHP wrapper class where I can manage my query function from one place. Here is the PDO wrapper class in PHP.
dbconfig.php
<?php //DB Params define('DBHOST', 'localhost'); define('DBUSER', 'root'); define('DBPASS', ''); define('DBNAME', 'mydb'); ?>
Database.php
<?php class Database { private $host = DBHOST; private $user = DBUSER; private $pass = DBPASS; private $dbname = DBNAME; private $dbh; private $error; private $stmt; public function __construct() { // Set DSN $dsn = 'mysql:host=' . $this->host . ';charset=utf8mb4;dbname=' . $this->dbname; // Set options $options = array ( PDO::ATTR_PERSISTENT => true, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_BOTH, PDO::ATTR_EMULATE_PREPARES => false, ); // Create a new PDO instance try { $this->dbh = new PDO ($dsn, $this->user, $this->pass, $options); } // Catch any errors catch (PDOException $e ) { $this->error = $e->getMessage(); } } public function query($query) { try { $this->stmt = $this->dbh->prepare($query); } catch ( PDOException $e ) { //return error message with SQL statement //$this->error = $e->getMessage(); echo '<div class="alert alert-danger"><strong>Error! </strong>'.$this->error = $e->getMessage().'<br>'.$query.'</div>'; } } //$this->stmt = $this->dbh->prepare($query); public function bind($param, $value, $type = null) { if (is_null ( $type )) { switch (true) { case is_int ( $value ) : $type = PDO::PARAM_INT; break; case is_bool ( $value ) : $type = PDO::PARAM_BOOL; break; case is_null ( $value ) : $type = PDO::PARAM_NULL; break; default : $type = PDO::PARAM_STR; } } $this->stmt->bindValue ( $param, $value, $type ); } public function execute(){ //return $this->stmt->execute(); try { return $this->stmt->execute(); } catch ( PDOException $e ) { echo '<div class="alert alert-danger"><strong>Error! </strong>'.$this->error = $e->getMessage().'</div>'; } } public function resultSet(){ $this->execute(); return $this->stmt->fetchAll(); } public function single(){ $this->execute(); return $this->stmt->fetch(); } public function rowCount(){ return $this->stmt->rowCount(); } public function lastInsertId(){ return $this->dbh->lastInsertId(); } public function beginTransaction(){ return $this->dbh->beginTransaction(); } public function endTransaction(){ return $this->dbh->commit(); } public function cancelTransaction(){ return $this->dbh->rollBack(); } public function debugDumpParams(){ return $this->stmt->debugDumpParams(); } public function close(){ $this->dbh = null; } }
Here is CRUD example:
//Call the class require_once('dbconfig.php'); require_once('Database.php'); $db = new Database; //Create data $customerEmail = 'info@test.com'; // or $_POST['customer_email']; $addCustSql = "INSERT INTO mytable (customer_email) VALUES (:customerEmail)"; $db->query($addCustSql); $db->bind(":customer_email", $customerEmail); $db->execute(); echo $db->lastInsertId(); //Read $custInfoSql = "SELECT * FROM customers WHERE customer_id = :customerId"; $db->query($custInfoSql); $db->bind(":customer_id", "1"); $result = $db->single(); echo $db->rowCount(); //print_r($result); echo $customerEmail = $result["customer_email"]; //Read (All) $custInfoSql = "SELECT * FROM customers"; $db->query($custInfoSql); $results = $db->resultSet(); echo $db->rowCount(); foreach ($results as $row) { echo $customerEmail = $result["customer_email"]; } //Read with WHERE $custInfoSql = "SELECT * FROM customers WHERE lname=:lname"; $db->query($custInfoSql); $db->bind(":lname", "John"); $results = $db->resultSet(); echo $db->rowCount(); foreach ($results as $row) { echo $customerEmail = $result["customer_email"]; } //Update data $customerId =1; // or $_POST['customer_id']; $customerEmail = 'info@test.com'; //$_POST['customer_email']; $updateCustSql ="UPDATE customers SET customer_email=:customerEmail WHERE customer_id =:customerId"; $db->query($updateCustSql); $db->bind(':customer_id', $customerId); $db->bind(':customerEmail', $customerEmail); $db->execute(); //Delete data $delCustSql = "DELETE FROM customers WHERE customer_id=:customerId"; $db->query($delCustSql); $db->bind(':customer_id', $customerId); $db->execute(); //Transcation $db->beginTransaction(); $db->query("INSERT INTO mytable (customer_email) VALUES (:customerEmail)"); //first data $db->bind(":customer_email", "info@test.com"); $db->execute(); //second data $db->bind(":customer_email", "info@example.com"); $db->execute(); $db->endTransaction();