Класс для работы с БД (placeholders)

  1. class SQL
  2. {
  3.     private $sql = false;
  4.     private $result = false;
  5. /*    
  6.     private static $instance = null;
  7.  
  8.     private function __construct(){}
  9.     private function __clone(){}
  10.     private function __wakeup(){}
  11.  
  12.     public static function getInstance() {
  13.         if (is_null(self::$instance)) {
  14.             self::$instance = new self();
  15.         }
  16.         return self::$instance;
  17.     }
  18. */    
  19.     public function isFetch() {
  20.         return preg_match('/select/i', $this->sql) ? true : false;
  21.     }
  22.  
  23.     public function prepare($sql) {
  24.         $this->sql = trim($sql);
  25.         return $this;
  26.     }
  27.  
  28.     public function fetch() {
  29.         return mysql_fetch_assoc($this->result);
  30.     }
  31.  
  32.     public function execute($args = array()) {
  33.         if (sizeof($args)) {
  34.             $args = $this->esc($args);
  35.             $parts = preg_split('#(\?)#u', $this->sql, null, PREG_SPLIT_DELIM_CAPTURE);
  36.             $cnt = sizeof($parts);
  37.             $cntargs = sizeof($args);
  38.             $cntparts = substr_count($this->sql, '?');
  39.  
  40.             if ($cntargs != $cntparts) {
  41.                 throw new InvalidArgumentException('Wrong number of arguments. Parts = ' . $cntparts . ', Args = ' . $cntargs);
  42.             }
  43.  
  44.             $sql = '';
  45.             for($i = 0; $i < $cnt; $i++) {
  46.                 $sql .= (($i % 2) == 0 ? $parts[$i] : str_replace('?', $args[($i/2)], $parts[$i]));
  47.             }
  48.             $sql .= ';';
  49.  
  50.             $res = mysql_query($sql);
  51.         } else {
  52.             $res = mysql_query($this->sql);
  53.         }
  54.  
  55.         $this->result = $this->isFetch() ? $res : mysql_affected_rows();
  56.         return $this;
  57.     }
  58.  
  59.     public function insert_id() {
  60.         $id = mysql_fetch_row(mysql_query("SELECT LAST_INSERT_ID()"));
  61.         return $id[0];
  62.     }
  63.  
  64.     public function esc($data) {
  65.         if (!is_array($data)) {
  66.             $data = is_int($data) ? $data : '"' . mysql_real_escape_string($data) . '"';
  67.         } else {
  68.             $data = array_map(array($this, 'esc'), $data);
  69.         }
  70.  
  71.         return $data;
  72.     }
  73. }
Как работать?
Где нибудь в начале скрипта инициализируем класс
  1. #$db = SQL::getInstance();
  2. $db = new SQL();
далее уже работаем с запросами
Пподолжение в первом коментарии

Реклама

Мы в соцсетях

tw tg yt gt