Класс для работы с БД (placeholders)
- class SQL
- {
- private $sql = false;
- private $result = false;
- /*
- private static $instance = null;
- private function __construct(){}
- private function __clone(){}
- private function __wakeup(){}
- public static function getInstance() {
- if (is_null(self::$instance)) {
- self::$instance = new self();
- }
- return self::$instance;
- }
- */
- public function isFetch() {
- return preg_match('/select/i', $this->sql) ? true : false;
- }
- public function prepare($sql) {
- $this->sql = trim($sql);
- return $this;
- }
- public function fetch() {
- return mysql_fetch_assoc($this->result);
- }
- public function execute($args = array()) {
- if (sizeof($args)) {
- $args = $this->esc($args);
- $parts = preg_split('#(\?)#u', $this->sql, null, PREG_SPLIT_DELIM_CAPTURE);
- $cnt = sizeof($parts);
- $cntargs = sizeof($args);
- $cntparts = substr_count($this->sql, '?');
- if ($cntargs != $cntparts) {
- throw new InvalidArgumentException('Wrong number of arguments. Parts = ' . $cntparts . ', Args = ' . $cntargs);
- }
- $sql = '';
- for($i = 0; $i < $cnt; $i++) {
- $sql .= (($i % 2) == 0 ? $parts[$i] : str_replace('?', $args[($i/2)], $parts[$i]));
- }
- $sql .= ';';
- $res = mysql_query($sql);
- } else {
- $res = mysql_query($this->sql);
- }
- $this->result = $this->isFetch() ? $res : mysql_affected_rows();
- return $this;
- }
- public function insert_id() {
- $id = mysql_fetch_row(mysql_query("SELECT LAST_INSERT_ID()"));
- return $id[0];
- }
- public function esc($data) {
- if (!is_array($data)) {
- $data = is_int($data) ? $data : '"' . mysql_real_escape_string($data) . '"';
- } else {
- $data = array_map(array($this, 'esc'), $data);
- }
- return $data;
- }
- }
Как работать?
Где нибудь в начале скрипта инициализируем класс
далее уже работаем с запросами
Пподолжение в первом коментарии
Где нибудь в начале скрипта инициализируем класс
- #$db = SQL::getInstance();
- $db = new SQL();
Пподолжение в первом коментарии