Last active
November 29, 2018 06:12
-
-
Save Martyr2/bd083525d157a9db6d34617eaa7abc38 to your computer and use it in GitHub Desktop.
Database PDO wrapper class for PHP
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Database PDO Wrapper | |
*/ | |
if (!class_exists('Database')) { | |
// Define configuration | |
define("DB_HOST", "localhost"); | |
define("DB_USER", "username"); | |
define("DB_PASS", "pass"); | |
define("DB_NAME", "dbname"); | |
class Database extends PDO { | |
private $host = DB_HOST; | |
private $user = DB_USER; | |
private $pass = DB_PASS; | |
private $dbname = DB_NAME; | |
private $dbh; | |
private $error; | |
private $stmt; | |
public function __construct($dbuser = "", $dbpass = "") { | |
if (!empty($dbuser)) { $this->user = $dbuser; } | |
if (!empty($dbpass)) { $this->pass = $dbpass; } | |
// Set DSN | |
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname; | |
// Set options | |
$options = array( | |
PDO::ATTR_PERSISTENT => true, | |
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION | |
); | |
// Create a new PDO instanace | |
try { | |
$this->dbh = new PDO($dsn, $this->user, $this->pass, $options); | |
$this->dbh->exec("SET NAMES 'utf8'"); | |
} | |
// Catch any errors | |
catch (PDOException $e) { | |
$this->error = $e->getMessage(); | |
} | |
} | |
// Prepare | |
public function query($query) { | |
$this->stmt = $this->dbh->prepare($query); | |
} | |
// Bind | |
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); | |
} | |
// Execute | |
public function execute() { | |
return $this->stmt->execute(); | |
} | |
// Result Set | |
public function resultset($fetchType = PDO::FETCH_ASSOC) { | |
$this->execute(); | |
return $this->stmt->fetchAll($fetchType); | |
} | |
// Single | |
public function single($fetchType = PDO::FETCH_ASSOC) { | |
$this->execute(); | |
return $this->stmt->fetch($fetchType); | |
} | |
// Row Count | |
public function rowCount() { | |
return $this->stmt->rowCount(); | |
} | |
// Last Insert Id | |
public function lastInsertId($seqname = NULL) { | |
return $this->dbh->lastInsertId($seqname); | |
} | |
// Transactions | |
public function beginTransaction() { | |
return $this->dbh->beginTransaction(); | |
} | |
public function endTransaction() { | |
return $this->dbh->commit(); | |
} | |
public function cancelTransaction() { | |
return $this->dbh->rollBack(); | |
} | |
// Debug Dump Parameters | |
public function debugDumpParams() { | |
return $this->stmt->debugDumpParams(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment