Skip to content

Instantly share code, notes, and snippets.

@Cyberiaaxis
Created April 25, 2017 01:17
Show Gist options
  • Save Cyberiaaxis/ef8fddb7542cca69de60b26eb4df02ba to your computer and use it in GitHub Desktop.
Save Cyberiaaxis/ef8fddb7542cca69de60b26eb4df02ba to your computer and use it in GitHub Desktop.
<?php
class DB {
private static $_instance = null; // to use in getInstance function (we can use static keyword)
private $_pdo, $_query, $_error = false, $_results, $_count = 0;
private function __construct() {
try {
$this->_pdo = new PDO("mysql:host=" . Config::get('mysql/host') .
';dbname=' . Config::get('mysql/db'), Config::get('mysql/username')
, Config::get('mysql/password'));
$this->_pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// print "Connected";
} catch (PDOException $ex) {
die($ex->getMessage());
};
}
public static function getInstance() {
if (!isset(self::$_instance)) {
self::$_instance = new DB();
}
return self::$_instance;
}
public function query($sql, $params = []) {
$this->_error = false;
// print $sql;
if ($this->_query = $this->_pdo->prepare($sql)) {
$x = 1;
// var_dump($params);
if (count($params)) {
foreach ($params as $param) {
// print $x;
$this->_query->bindValue($x, $param);
$x++;
}
}
if ($this->_query->execute()) {
try{
if(!$_SESSION['session/session_name']){
$this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ);
$this->_count = $this->_query->rowCount();
}
} catch (PDOException $pdo){
$pdo->getMessage();
}
} else {
$this->_error = true;
}
}
return $this;
}
public function action($action, $table, $where = []) {
if (count($where) === 3) {
$operators = ['=', '>', '<', '>=', '<='];
$field = $where[0];
$operator = $where[1];
$value = $where[2];
if (in_array($operator, $operators)) {
$sql = "{$action} FROM {$table} WHERE {$field} {$operator} ?";
if (!$this->query($sql, [$value])->error()) {
return $this;
}
}
}
return false;
}
public function get($table, $where) {
return $this->action("SELECT *", $table, $where);
}
public function delete($table, $where) {
return $this->action("DELETE", $table, $where);
}
public function results() {
return $this->_results;
}
public function first() {
return $this->results()[0];
}
public function insert($table, $fields = []) {
$keys = array_keys($fields);
$values = '';
$y = 1;
foreach ($fields as $field) {
$values .= '?';
if ($y < count($fields)) {
$values .= ',';
}
$y++;
}
$sql = 'INSERT INTO ' . $table . ' (' . implode(',', $keys) . ') VALUES (' . $values . ')';
// print $sql;
//var_dump($this->query($sql, $fields));
if (!$this->query($sql, $fields)->error()) {
return true;
}
return false;
}
public function update($table, $id, $fields) {
$set = '';
$x = 1;
foreach ($fields as $name => $value) {
$set .= $name . ' = ?';
if ($x < count($fields)) {
$set .= ',';
}
$x++;
}
$sql = "UPDATE $table SET $set WHERE id = $id";
echo $sql;
if (!$this->query($sql, $fields)->error()) {
return true;
}
}
public function error() {
return $this->_error;
}
public function count() {
return $this->_count;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment