Advertisement
eugeniabahit

Capa de Abstracción a base de datos para PHP

Jul 10th, 2013
314
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.29 KB | None | 0 0
  1. <?php
  2. /**
  3. * Capa de abstracción a bases de datos MySQL
  4. *
  5. * @package    EuropioEngine
  6. * @subpackage ORMEngine
  7. * @license    http://www.gnu.org/licenses/gpl.txt  GNU GPL 3.0
  8. * @author     Eugenia Bahit <ebahit@member.fsf.org>
  9. * @link       http://www.europio.org
  10. */
  11.  
  12.  
  13. class MySQLiLayer {
  14.  
  15.     protected static $conn;
  16.     protected static $stmt;
  17.     protected static $reflection;
  18.     protected static $sql;
  19.     protected static $data;
  20.     public static $results = array();
  21.  
  22.     protected static function conectar($dbname=False) {
  23.         $db = (!$dbname) ? DB_NAME : $dbname;
  24.         if(defined('DB_TESTING')) $db = DB_TESTING;
  25.         self::$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, $db);
  26.     }
  27.  
  28.     protected static function preparar() {
  29.         self::$stmt = self::$conn->prepare(self::$sql);
  30.         self::$reflection = new ReflectionClass('mysqli_stmt');
  31.     }
  32.    
  33.     protected static function set_params() {
  34.         $method = self::$reflection->getMethod('bind_param');
  35.         $method->invokeArgs(self::$stmt, self::$data);
  36.     }
  37.    
  38.     protected static function get_data($fields) {
  39.         $method = self::$reflection->getMethod('bind_result');
  40.         $method->invokeArgs(self::$stmt, $fields);
  41.         self::$results = array();
  42.        
  43.         while(self::$stmt->fetch()) {
  44.             self::$results[] = unserialize(serialize($fields));
  45.         }
  46.     }
  47.  
  48.     protected static function finalizar() {
  49.         self::$stmt->close();
  50.         self::$conn->close();
  51.     }
  52.  
  53.     public static function ejecutar($sql, $data, $fields=False, $db=False) {
  54.         self::$sql = $sql;
  55.         self::$data = $data;
  56.         self::conectar($db);
  57.         self::preparar();
  58.         self::set_params();
  59.         self::$stmt->execute();
  60.         if($fields) {
  61.             self::get_data($fields);
  62.             return self::$results;
  63.         } else {
  64.             if(strpos(strtoupper(self::$sql), 'INSERT') === 0) {
  65.                 return self::$stmt->insert_id;
  66.             } else {
  67.                 return self::$stmt->affected_rows;
  68.             }
  69.         }
  70.         self::finalizar();
  71.     }
  72.  
  73. }
  74.  
  75.  
  76. # Alias para estilo por procedimientos
  77. function mysqli_run_query($sql, $data, $fields=False, $db=False) {
  78.     return MySQLiLayer::ejecutar($sql, $data, $fields, $db);
  79. }
  80.  
  81. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement