Advertisement
benshepherd

Untitled

Dec 11th, 2013
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 9.07 KB | None | 0 0
  1. <?php
  2.  
  3. class DB {
  4.  
  5.         private static $instance;
  6.         private static $con;
  7.         private static $customError;       
  8.  
  9.         public static function init($host, $user, $pass, $db) {
  10.  
  11.             if(!isset(self::$instance)) {
  12.  
  13.                 try {
  14.                     self::$instance = new PDO('mysql:host='.$host.';dbname='.$db, $user, $pass);
  15.                     //self::$instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  16.                     self::$con = true;
  17.                 }
  18.                 catch (PDOException $e) {
  19.                    
  20.                     self::$customError = $e->getMessage();
  21.                     self::$con = false;
  22.                 }
  23.             }
  24.         }
  25.        
  26.         public static function isConnected() {
  27.            
  28.             return self::$con; 
  29.         }
  30.        
  31.         public static function select($table, $columns = '*', $where = NULL, $limit = NULL)
  32.         {
  33.             $sql = "SELECT $columns FROM $table";
  34.             $params = array();
  35.            
  36.             if($where != NULL)
  37.             {
  38.                 if(!is_array($where))
  39.                 {
  40.                     echo 'Error in DB::select function: \'where\' parameter must be Array';
  41.                     return false;
  42.                 }
  43.                 if(!is_array($where[0]) && count($where) == 2)
  44.                 {
  45.                     $where = array($where);
  46.                 }
  47.                                
  48.                
  49.                 $sql .= " WHERE";
  50.                
  51.                 for($i = 0; $i < count($where); $i++)
  52.                 {
  53.                     $w = $where[$i];
  54.                    
  55.                     if(is_array($w))
  56.                     {
  57.                         if(count($w) == 2)
  58.                         {
  59.                             $sql .= " `$w[0]` = ?";
  60.                             $params[] = $w[1];
  61.                         }
  62.                         else if(count($w) == 3)
  63.                         {
  64.                             $sql .= " `$w[0]` $w[1] = ?";
  65.                             $params[] = $w[2]; 
  66.                         }
  67.                        
  68.                         if($i != count($where)-1)
  69.                         {
  70.                             $sql = " AND";     
  71.                         }                      
  72.                     }
  73.                 }
  74.             }
  75.            
  76.             if($limit != NULL)
  77.             {
  78.                 $sql = " LIMIT $limit";
  79.             }
  80.            
  81.             return self::query($sql, $params);
  82.         }
  83.  
  84.         public static function query($query, $params = array()) {
  85.            
  86.             try {
  87.                 $params = !is_array($params) ? array($params) : $params;
  88.                 $data = array();
  89.                 $is_select = strtoupper(substr($query,0,6)) == "SELECT" ? true : false;
  90.                
  91.                 if(count($params) > 0) {
  92.                    
  93.                     $stmt = self::$instance->prepare($query);
  94.                    
  95.                     if(!$stmt)
  96.                     {
  97.                         return false;  
  98.                     }
  99.                    
  100.                     $stmt->execute($params);           
  101.                    
  102.                     if($is_select)
  103.                         $data = $stmt->fetchAll(PDO::FETCH_ASSOC);
  104.                     else {
  105.                         $data = true;  
  106.                     }
  107.                    
  108.                     $stmt->closeCursor();
  109.                 }
  110.                 else {
  111.    
  112.                     $res = self::$instance->query($query);
  113.    
  114.                     if(!$res)
  115.                     {                  
  116.                         return false;  
  117.                     }
  118.                     else if($is_select)
  119.                     {
  120.                         foreach($res as $row)
  121.                             $data[] = $row;
  122.                     }
  123.                     else
  124.                     {
  125.                         $data = true;  
  126.                     }
  127.                 }
  128.                
  129.                 self::$customError = "";
  130.                
  131.                 return $data;
  132.             }
  133.             catch(Exception $e) {
  134.                
  135.                 self::setError($e->getMessage());
  136.                 return false;  
  137.             }
  138.         }
  139.        
  140.         public static function getError() {
  141.            
  142.             if(strlen(self::$customError) > 0)
  143.             {
  144.                 return self::$customError;
  145.             }
  146.             else
  147.             {
  148.                 $err = self::$instance->errorInfo();   
  149.                 return $err[count($err)-1];
  150.             }
  151.         }
  152.        
  153.         public static function setError($e) {
  154.            
  155.             self::$customError = $e;   
  156.         }
  157.     }
  158.    
  159.     // shit class
  160.     class DB2 {
  161.        
  162.         private static $i;
  163.         private static $con;
  164.         private static $customError;
  165.        
  166.         public static function init($host, $user, $pass, $db) {
  167.        
  168.             if(!isset(self::$i)) {
  169.                
  170.                 self::$i = new mysqli($host, $user, $pass, $db);
  171.                 self::$con = !(self::$i->connect_errno > 0);
  172.                 self::$customError = "";
  173.             }
  174.         }
  175.        
  176.         public static function isConnected() {
  177.             return self::$con; 
  178.         }
  179.        
  180.         public static function ConnectionError() {
  181.             return self::$i->connect_error;
  182.         }
  183.        
  184.         public static function tableExists($tbl_name) {
  185.            
  186.             $q = self::query("SHOW TABLES LIKE ?", $tbl_name);
  187.            
  188.             return !!$q && count($q) > 0;
  189.         }
  190.        
  191.         public static function rawQuery($q) {
  192.             return self::$i->query($q);
  193.         }
  194.         private static function getTypes($params)
  195.         {
  196.             $param_type = '';
  197.            
  198.             foreach($params as $p)
  199.             {
  200.                 switch(gettype($p))
  201.                 {
  202.                     case 'blob':
  203.                         $param_type .= 'b';
  204.                         break;
  205.                     case 'double':
  206.                         $param_type .= 'd';
  207.                         break;
  208.                
  209.                     case 'integer':
  210.                         $param_type .= 'i';
  211.                         break;
  212.                     case 'NULL':
  213.                     case 'string':
  214.                         $param_type .= 's';
  215.                         break;
  216.                     default:
  217.                         $param_type .= 's';
  218.                         break;                     
  219.                 }
  220.             }
  221.            
  222.             return $param_type;
  223.         }
  224.        
  225.         public static function query($sql, $params = null)
  226.             {
  227.                 $types = self::getTypes($params);
  228.                
  229.                 # create a prepared statement
  230.                 $stmt = self::$i->prepared($sql);
  231.        
  232.                 # bind parameters for markers
  233.                 # but this is not dynamic enough...
  234.                 //$stmt->bind_param("s", $parameter);
  235.        
  236.                 if($types&&$params)
  237.                 {
  238.                     $bind_names[] = $types;
  239.                     for ($i=0; $i<count($params);$i++)
  240.                     {
  241.                         $bind_name = 'bind' . $i;
  242.                         $$bind_name = $params[$i];
  243.                         $bind_names[] = &$$bind_name;
  244.                     }
  245.                     $return = call_user_func_array(array($stmt,'bind_param'),$bind_names);
  246.                 }
  247.        
  248.                 # execute query
  249.                 $stmt->execute();
  250.        
  251.                 # these lines of code below return one dimentional array, similar to mysqli::fetch_assoc()
  252.                 $meta = $stmt->result_metadata();
  253.        
  254.                 while ($field = $meta->fetch_field()) {
  255.                     $var = $field->name;
  256.                     $$var = null;
  257.                     $parameters[$field->name] = &$$var;
  258.                 }
  259.        
  260.                 call_user_func_array(array($stmt, 'bind_result'), $parameters);
  261.        
  262.                 while($stmt->fetch())
  263.                 {
  264.                     return $parameters;
  265.                     //print_r($parameters);      
  266.                 }
  267.        
  268.        
  269.                 # the commented lines below will return values but not arrays
  270.                 # bind result variables
  271.                 //$stmt->bind_result($id);
  272.        
  273.                 # fetch value
  274.                 //$stmt->fetch();
  275.        
  276.                 # return the value
  277.                 //return $id;
  278.        
  279.                 # close statement
  280.                 $stmt->close();
  281.             }
  282.        
  283.         public static function query3($query, $a_bind_params = array())
  284.         {
  285.            
  286.             $is_select = strtoupper(substr($query,0,6)) == "SELECT" ? true : false;
  287.            
  288.             if($is_select && count($a_bind_params) == 0)
  289.             {
  290.                 $res = self::$i->query($query);
  291.                 $a_data = array();
  292.                
  293.                 while($row = $res->fetch_assoc())
  294.                 {
  295.                     $a_data[] = $row;  
  296.                 }
  297.                
  298.                 return $a_data;
  299.             }
  300.             else
  301.             {
  302.                 if(count($a_bind_params) > 0)
  303.                 {
  304.                    
  305.                     $a_params = array();
  306.                    
  307.                     $param_type = '';
  308.                    
  309.                     for($i = 0; $i < count($a_bind_params); $i++)
  310.                     {
  311.                         switch(gettype($a_bind_params[$i]))
  312.                         {
  313.                             case 'blob':
  314.                                 $param_type .= 'b';
  315.                                 break;
  316.                             case 'double':
  317.                                 $param_type .= 'd';
  318.                                 break;
  319.                        
  320.                             case 'integer':
  321.                                 $param_type .= 'i';
  322.                                 break;
  323.                             case 'NULL':
  324.                             case 'string':
  325.                                 $param_type .= 's';
  326.                                 break;
  327.                             default:
  328.                                 $param_type .= 's';
  329.                                 break;
  330.                         }
  331.                     }
  332.                    
  333.                     $param_type[] = &$param_type;
  334.                    
  335.             echo "QUERY: ".$query."<br>";
  336.             echo "TYPES: <br>";
  337.             prettyprint($param_type);
  338.             echo "<br>";
  339.             echo "PARAMS (".count($a_bind_params)."): <br>";
  340.             prettyprint($a_bind_params);                   
  341.                    
  342.                     for($i = 0; $i < count($a_bind_params);$i++)
  343.                     {
  344.                         $a_params[] = $a_bind_params[$i];  
  345.                     }
  346.                 }
  347.                
  348.                 $stmt = self::$i->prepare($query);
  349.                
  350.                 if($stmt == false)
  351.                 {
  352.                     return false;
  353.                 }
  354.                 call_user_func_array(array($stmt, 'bind_param'), $a_params);
  355.                
  356.                 $stmt->execute();
  357.                
  358.                 if($is_select)
  359.                 {
  360.                     $a_data = array();
  361.                    
  362.                     $res = $stmt->get_result();
  363.                    
  364.                     while($row = $res->fetch_array(MYSQLI_ASSOC))
  365.                     {
  366.                       $a_data[] = $row;
  367.                     }
  368.                    
  369.                     return $a_data;                
  370.                 }
  371.                 else
  372.                 {
  373.                     return true;;
  374.                 }
  375.             }
  376.         }
  377.        
  378.         public static function query2($query, $params = array())
  379.         {      
  380.             $data = array();
  381.             $is_select = strtoupper(substr($query,0,6)) == "SELECT" ? true : false;
  382.            
  383.             if(!is_array($params))
  384.                 $params = array($params);
  385.            
  386.             $stmt = self::$i->prepare($query);
  387.            
  388.             if(!$stmt)
  389.                 return false;
  390.  
  391.             $types = "";
  392.            
  393.             foreach($params as $value)
  394.             {
  395.                 switch(gettype($value))
  396.                 {
  397.                     case 'blob':
  398.                         $types .= 'b';
  399.                         break;
  400.                     case 'double':
  401.                         $types .= 'd';
  402.                         break;
  403.                
  404.                     case 'integer':
  405.                         $types .= 'i';
  406.                         break;
  407.                     case 'NULL':
  408.                     case 'string':
  409.                         $types .= 's';
  410.                         break;
  411.                     default:
  412.                         $types .= 's';
  413.                         break;
  414.                 }
  415.             }
  416.            
  417.             echo str_repeat("-",8)."<br>";
  418.             echo "Query: ".$query."<br>";
  419.             echo "Types(".strlen($types)."): ".$types."<br>";
  420.             echo "Params(".count($params)."): ";
  421.             prettyprint($params);
  422.             echo str_repeat("-",8)."<br>";         
  423.            
  424.             $stmt->bind_param($types, $params);
  425.             $stmt->execute();
  426.            
  427.            
  428.             if($is_select)
  429.             {
  430.                 $res = $stmt->get_result();
  431.                 $stmt->close();
  432.                
  433.                 if(!$res) return false;
  434.                
  435.                 while($row = $res->fetch_array(MYSQLI_ASSOC) )
  436.                 {
  437.                     $data[] = $row;
  438.                 }
  439.                
  440.                 self::$customError = "";
  441.                
  442.                 return $data;
  443.             }
  444.             else
  445.             {
  446.                 return true;
  447.             }
  448.         }
  449.        
  450.         public static function getError() {
  451.             return strlen(self::$customError) > 0 ? self::$customError : self::$i->error;  
  452.         }
  453.        
  454.         public static function setError($e) {
  455.             self::$customError = $e;   
  456.         }
  457.        
  458.         public static function escape($v) {
  459.             return self::$i->real_escape_string($v);   
  460.         }
  461.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement