Solution Review: PHP Database
Let's look at the solution of the PHP Database challenge.
We'll cover the following...
Solution
<?php // DB credentials. define('DB_HOST', '127.0.0.1'); define('DB_USER', 'educative');//database username define('DB_PASS', 'root');// database passord define('DB_NAME', 'testing'); //database name class Db { // Hold the handle for the PDO object in a private variable. private $dbh; // Establish database connection // or display an error message. function __construct() { try { $this->dbh = new \PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME, DB_USER, DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'")); echo "connected\n"; } catch (PDOException $e) { exit("Error: " . $e->getMessage()); } } // Method to get the database handler // so it can be used outside of this class. function get() { return $this->dbh; } // Set the PDO object to null to close the connection. function close(){ $this->dbh = null; } } class User { private $tableName = 'users'; private $dbCon; // First, save the connection in a private property. function __construct($dbCon) { $this->dbCon = $dbCon; // Creating table "users" in database $sql = "CREATE TABLE IF NOT EXISTS users ( id int(10) UNSIGNED NOT NULL AUTO_INCREMENT, name varchar(60) DEFAULT NULL, phone varchar(14) DEFAULT NULL, city varchar(60) DEFAULT NULL, date_added date DEFAULT NULL, PRIMARY KEY (id) )"; // use exec() because no results are returned $this->dbCon->exec($sql); echo "Table users created successfully\n"; } // Insert new user to the database. function insert($name,$phone,$city) { // The insert query. $sql = "INSERT INTO `{$this->tableName}` (`name`,`phone`, `city`, `date_added`) VALUES (:name,:phone,:city,:created)"; // Bind and filter. $query = $this->dbCon->prepare($sql); $query->bindParam(':name',$name,PDO::PARAM_STR); $query->bindParam(':phone',$phone,PDO::PARAM_STR); $query->bindParam(':city',$city,PDO::PARAM_STR); $now = date('Y-m-d'); $query->bindParam(':created',$now,PDO::PARAM_STR); $query -> execute(); // The id of the newly created row in the table. $lastInsertId = $this->dbCon->lastInsertId(); if($lastInsertId>0) return $lastInsertId; else return false; } function getUserById($id) { $sql = "SELECT * FROM `{$this->tableName}` WHERE `id` = :id LIMIT 1"; $query = $this->dbCon->prepare($sql); $query -> bindParam(':id', $id, PDO::PARAM_INT); $query -> execute(); $results = $query -> fetchAll(PDO::FETCH_OBJ); if($query -> rowCount() < 1) return false; return $results[0]; } // Get all the users. function getAll() { $sql = "SELECT * FROM `{$this->tableName}` WHERE 1"; $query = $this->dbCon->prepare($sql); $query -> bindParam(':id', $id, PDO::PARAM_INT); $query -> execute(); $results = $query -> fetchAll(PDO::FETCH_OBJ); if($query -> rowCount() < 1) return false; return $results; } function updateUser($id,$array) { $sql = "UPDATE `{$this->tableName}` SET "; $columns = array(); foreach($array as $fieldName => $value) { $columns[] = "`{$fieldName}` = :{$fieldName}"; } $sql .= implode(',',$columns); $sql .= ' WHERE `id` = :id'; $query = $this->dbCon->prepare($sql); foreach($array as $fieldName => $value) { // Use bindValue, not bindParam because // bindParam only gets its value at the time of execution. $query -> bindValue(":{$fieldName}",$value); } $query -> bindParam(':id', $id, PDO::PARAM_INT); $query -> execute(); if($query -> rowCount() < 1) return false; return $id; } function delete($id) { $sql = "DELETE FROM `{$this->tableName}` WHERE `id`=:id"; $query = $this->dbCon->prepare($sql); $query -> bindParam(':id', $id, PDO::PARAM_INT); $query -> execute(); if($query -> rowCount() < 1) return false; return true; } } // Create the pdo object. $db = new Db; // Get the connection. $dbCon = $db->get(); // When creating the new User class // pass the connection. $userObj = new User($dbCon); // Test insertion. echo "Inserting user in table\n"; var_dump($userObj->insert('James Tiberius Kirk','0544308209','Riverside, Iowa')); // Test selection. echo "\nGetting user by id\n"; var_dump($userObj->getUserById(1)); echo "\nGetting all users the table\n"; var_dump($userObj->getAll()); // Test update. echo "\nUpdated the user\n"; $array=['name'=>'Captain Kirk','city'=>'Tarsus IV','date_added'=>'2233-03-22']; var_dump($userObj->updateUser(1,$array)); var_dump($userObj->getUserById(1)); // Test delete. echo "\nDeleted the user\n"; var_dump($userObj->delete(1));
Solution
Explanation
-
Lines 8–11: We define database ...