Last active
October 15, 2019 06:04
-
-
Save ehcaning/cad1c677f53e5edb3e00367ed1fce5eb to your computer and use it in GitHub Desktop.
My personal DB Class (Including Singleton)
This file contains hidden or 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 | |
# v2.2 | |
class dbM { | |
private static $pdo; | |
private static $instance; | |
private function __construct() { | |
} | |
public static function init() { | |
if (!isset(self::$instance)) { | |
$c = __CLASS__; | |
self::$instance = new $c; | |
try { | |
self::$pdo = new PDO( | |
'mysql:host=localhost;dbname=' . DB_NAME . ';charset=UTF8', | |
DB_USER, | |
DB_PASS, | |
[ | |
PDO::ATTR_EMULATE_PREPARES => false, | |
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, | |
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, | |
] | |
); | |
} catch (\Throwable $th) { | |
//throw $th; | |
} | |
} | |
return self::$instance; | |
} | |
public static function fetch($sql, $params = null) { | |
$stmt = self::$pdo->prepare($sql); | |
$stmt->execute($params); | |
return $stmt->fetch(); | |
} | |
public static function fetchColumn($sql, $params = null) { | |
$stmt = self::$pdo->prepare($sql); | |
$stmt->execute($params); | |
return $stmt->fetchColumn(); | |
} | |
public static function fetchAll($sql, $params = null) { | |
$stmt = self::$pdo->prepare($sql); | |
$stmt->execute($params); | |
return $stmt->fetchAll(); | |
} | |
public static function fetchAllColumn($sql, $params = null) { | |
$stmt = self::$pdo->prepare($sql); | |
$stmt->execute($params); | |
return $stmt->fetchAll(PDO::FETCH_COLUMN); | |
} | |
public static function fetchKeyPair($sql, $params = null) { | |
$stmt = self::$pdo->prepare($sql); | |
$stmt->execute($params); | |
return $stmt->fetchAll(PDO::FETCH_KEY_PAIR); | |
} | |
public static function fetchKeyPairs($sql, $params = null) { | |
$stmt = self::$pdo->prepare($sql); | |
$stmt->execute($params); | |
return $stmt->fetchAll(PDO::FETCH_GROUP | PDO::FETCH_COLUMN); | |
} | |
public static function fetchGroup($sql, $params = null) { | |
$stmt = self::$pdo->prepare($sql); | |
$stmt->execute($params); | |
return $stmt->fetchAll(PDO::FETCH_GROUP); | |
} | |
public static function exist($sql, $params = null) { | |
$stmt = self::$pdo->prepare($sql); | |
$stmt->execute($params); | |
return $stmt->rowCount() ? true:false; | |
} | |
public static function rowCount($sql, $params = null) { | |
$stmt = self::$pdo->prepare($sql); | |
$stmt->execute($params); | |
return $stmt->rowCount(); | |
} | |
public static function query($sql, $params = null) { | |
$stmt = self::$pdo->prepare($sql); | |
$stmt->execute($params); | |
return $stmt->rowCount(); | |
} | |
public static function insert($tblName, $insertItems, $ignore = false) { | |
$sql = self::queryBuilder($tblName, $insertItems, $ignore); | |
$stmt = self::$pdo->prepare($sql); | |
$stmt->execute($insertItems); | |
return self::$pdo->lastInsertId(); | |
} | |
/* | |
insertMany( | |
'my_table', | |
[ 'col1', 'col2' ], | |
[ | |
[ 'col1_val_1', 'col2_val_1' ], | |
[ 'col1_val_2', 'col2_val_2' ], | |
[ 'col1_val_3', 'col2_val_3' ] | |
] | |
) | |
*/ | |
public static function insertMany($tableName, $columns, $values, $ignore = false) { | |
$params = []; | |
$query = $ignore ? | |
"INSERT IGNORE INTO `${tableName}` (": | |
"INSERT INTO `${tableName}` ("; | |
$columnsString = ''; | |
foreach ($columns as $column) { | |
$columnsString .= '`' . $column . '`,'; | |
} | |
$columnsString = rtrim($columnsString, ','); | |
$query .= $columnsString . ') VALUES '; | |
$valuesString = ''; | |
foreach ($values as $value) { | |
$valuesString .= '('; | |
foreach ($value as $col) { | |
$valuesString .= "?,"; | |
$params[] = $col; | |
} | |
$valuesString = rtrim($valuesString, ','); | |
$valuesString .= '),'; | |
} | |
$valuesString = rtrim($valuesString, ','); | |
$query .= $valuesString; | |
return self::query($query, $params); | |
} | |
private static function queryBuilder($tblName, $insertItems, $ignore) { | |
$ignore = $ignore? 'IGNORE':''; | |
$c = ''; | |
$v = ''; | |
foreach ($insertItems as $key => $value) { | |
$c .= '`' . $key . '`,'; | |
$v .= ':' . $key . ','; | |
} | |
$c = rtrim($c, ','); | |
$v = rtrim($v, ','); | |
$finalQuery = "INSERT {$ignore} INTO `{$tblName}` ({$c}) VALUES ({$v})"; | |
return $finalQuery; | |
} | |
} | |
dbM::init(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment