<?php
class DB {
private static $instance;
private static $con;
private static $customError;
public static function init($host, $user, $pass, $db) {
if(!isset(self::$instance)) {
try {
self::$instance = new PDO('mysql:host='.$host.';dbname='.$db, $user, $pass);
//self::$instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
self::$con = true;
}
catch (PDOException $e) {
self::$customError = $e->getMessage();
self::$con = false;
}
}
}
public static function isConnected() {
return self::$con;
}
public static function select($table, $columns = '*', $where = NULL, $limit = NULL)
{
$sql = "SELECT $columns FROM $table";
$params = array();
if($where != NULL)
{
if(!is_array($where))
{
echo 'Error in DB::select function: \'where\' parameter must be Array';
return false;
}
if(!is_array($where[0]) && count($where) == 2)
{
$where = array($where);
}
$sql .= " WHERE";
for($i = 0; $i < count($where); $i++)
{
$w = $where[$i];
if(is_array($w))
{
if(count($w) == 2)
{
$sql .= " `$w[0]` = ?";
$params[] = $w[1];
}
else if(count($w) == 3)
{
$sql .= " `$w[0]` $w[1] = ?";
$params[] = $w[2];
}
if($i != count($where)-1)
{
$sql = " AND";
}
}
}
}
if($limit != NULL)
{
$sql = " LIMIT $limit";
}
return self::query($sql, $params);
}
public static function query($query, $params = array()) {
try {
$params = !is_array($params) ? array($params) : $params;
$data = array();
$is_select = strtoupper(substr($query,0,6)) == "SELECT" ? true : false;
if(count($params) > 0) {
$stmt = self::$instance->prepare($query);
if(!$stmt)
{
return false;
}
$stmt->execute($params);
if($is_select)
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
else {
$data = true;
}
$stmt->closeCursor();
}
else {
$res = self::$instance->query($query);
if(!$res)
{
return false;
}
else if($is_select)
{
foreach($res as $row)
$data[] = $row;
}
else
{
$data = true;
}
}
self::$customError = "";
return $data;
}
catch(Exception $e) {
self::setError($e->getMessage());
return false;
}
}
public static function getError() {
if(strlen(self::$customError) > 0)
{
return self::$customError;
}
else
{
$err = self::$instance->errorInfo();
return $err[count($err)-1];
}
}
public static function setError($e) {
self::$customError = $e;
}
}
// shit class
class DB2 {
private static $i;
private static $con;
private static $customError;
public static function init($host, $user, $pass, $db) {
if(!isset(self::$i)) {
self::$i = new mysqli($host, $user, $pass, $db);
self::$con = !(self::$i->connect_errno > 0);
self::$customError = "";
}
}
public static function isConnected() {
return self::$con;
}
public static function ConnectionError() {
return self::$i->connect_error;
}
public static function tableExists($tbl_name) {
$q = self::query("SHOW TABLES LIKE ?", $tbl_name);
return !!$q && count($q) > 0;
}
public static function rawQuery($q) {
return self::$i->query($q);
}
private static function getTypes($params)
{
$param_type = '';
foreach($params as $p)
{
switch(gettype($p))
{
case 'blob':
$param_type .= 'b';
break;
case 'double':
$param_type .= 'd';
break;
case 'integer':
$param_type .= 'i';
break;
case 'NULL':
case 'string':
$param_type .= 's';
break;
default:
$param_type .= 's';
break;
}
}
return $param_type;
}
public static function query($sql, $params = null)
{
$types = self::getTypes($params);
# create a prepared statement
$stmt = self::$i->prepared($sql);
# bind parameters for markers
# but this is not dynamic enough...
//$stmt->bind_param("s", $parameter);
if($types&&$params)
{
$bind_names[] = $types;
for ($i=0; $i<count($params);$i++)
{
$bind_name = 'bind' . $i;
$$bind_name = $params[$i];
$bind_names[] = &$$bind_name;
}
$return = call_user_func_array(array($stmt,'bind_param'),$bind_names);
}
# execute query
$stmt->execute();
# these lines of code below return one dimentional array, similar to mysqli::fetch_assoc()
$meta = $stmt->result_metadata();
while ($field = $meta->fetch_field()) {
$var = $field->name;
$$var = null;
$parameters[$field->name] = &$$var;
}
call_user_func_array(array($stmt, 'bind_result'), $parameters);
while($stmt->fetch())
{
return $parameters;
//print_r($parameters);
}
# the commented lines below will return values but not arrays
# bind result variables
//$stmt->bind_result($id);
# fetch value
//$stmt->fetch();
# return the value
//return $id;
# close statement
$stmt->close();
}
public static function query3($query, $a_bind_params = array())
{
$is_select = strtoupper(substr($query,0,6)) == "SELECT" ? true : false;
if($is_select && count($a_bind_params) == 0)
{
$res = self::$i->query($query);
$a_data = array();
while($row = $res->fetch_assoc())
{
$a_data[] = $row;
}
return $a_data;
}
else
{
if(count($a_bind_params) > 0)
{
$a_params = array();
$param_type = '';
for($i = 0; $i < count($a_bind_params); $i++)
{
switch(gettype($a_bind_params[$i]))
{
case 'blob':
$param_type .= 'b';
break;
case 'double':
$param_type .= 'd';
break;
case 'integer':
$param_type .= 'i';
break;
case 'NULL':
case 'string':
$param_type .= 's';
break;
default:
$param_type .= 's';
break;
}
}
$param_type[] = &$param_type;
echo "QUERY: ".$query."<br>";
echo "TYPES: <br>";
prettyprint($param_type);
echo "<br>";
echo "PARAMS (".count($a_bind_params)."): <br>";
prettyprint($a_bind_params);
for($i = 0; $i < count($a_bind_params);$i++)
{
$a_params[] = $a_bind_params[$i];
}
}
$stmt = self::$i->prepare($query);
if($stmt == false)
{
return false;
}
call_user_func_array(array($stmt, 'bind_param'), $a_params);
$stmt->execute();
if($is_select)
{
$a_data = array();
$res = $stmt->get_result();
while($row = $res->fetch_array(MYSQLI_ASSOC))
{
$a_data[] = $row;
}
return $a_data;
}
else
{
return true;;
}
}
}
public static function query2($query, $params = array())
{
$data = array();
$is_select = strtoupper(substr($query,0,6)) == "SELECT" ? true : false;
if(!is_array($params))
$params = array($params);
$stmt = self::$i->prepare($query);
if(!$stmt)
return false;
$types = "";
foreach($params as $value)
{
switch(gettype($value))
{
case 'blob':
$types .= 'b';
break;
case 'double':
$types .= 'd';
break;
case 'integer':
$types .= 'i';
break;
case 'NULL':
case 'string':
$types .= 's';
break;
default:
$types .= 's';
break;
}
}
echo str_repeat("-",8)."<br>";
echo "Query: ".$query."<br>";
echo "Types(".strlen($types)."): ".$types."<br>";
echo "Params(".count($params)."): ";
prettyprint($params);
echo str_repeat("-",8)."<br>";
$stmt->bind_param($types, $params);
$stmt->execute();
if($is_select)
{
$res = $stmt->get_result();
$stmt->close();
if(!$res) return false;
while($row = $res->fetch_array(MYSQLI_ASSOC) )
{
$data[] = $row;
}
self::$customError = "";
return $data;
}
else
{
return true;
}
}
public static function getError() {
return strlen(self::$customError) > 0 ? self::$customError : self::$i->error;
}
public static function setError($e) {
self::$customError = $e;
}
public static function escape($v) {
return self::$i->real_escape_string($v);
}
}
Comments