За последние 24 часа нас посетили 17705 программистов и 1280 роботов. Сейчас ищут 1479 программистов ...

заточка PDO "под себя"

Тема в разделе "PHP и базы данных", создана пользователем Ti, 19 окт 2006.

  1. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    Решил выложить класс, расширяющий стандартный класс для работы с базами данных PDO

    Как создавать базу написано в мануале
    при использовании insert и update автоматически экранирует переменные, например
    $values = array('row1'=>'value1', 'row2'=>'value2');
    $insertId = $db->insert('table', $values);

    иногда можно сократить, если переменные так же как поля в бд называются
    $insertId = $db->insert('table', compact('row1', 'row2'));

    и конечно же все фичи PDO работают.
    PHP:
    1.  
    2. <?php
    3. class db extends PDO {
    4.     # запрос без результатов (alias exec)
    5.         function e() {
    6.             $params = func_get_args();
    7.             $ret = call_user_func_array(array($this,'exec'), $params);
    8.             return $ret;
    9.         }
    10.     # alias query
    11.         function q() {
    12.             $params = func_get_args();
    13.             return call_user_func_array(array($this,'query'), $params);
    14.         }
    15.     # значение
    16.         function value($q) {
    17.             $ret = $this->line($q, 0);
    18.             return $ret ? current($ret) : $ret;
    19.         }
    20.     # строка
    21.         function line($q, $assoc = 1) {
    22.             $sth = $this->prepare($q);
    23.             $sth->execute();
    24.             $arr = $sth->fetch($assoc ? PDO::FETCH_ASSOC : PDO::FETCH_NUM);
    25.             unset($sth);
    26.             return $arr;
    27.         }
    28.     # массив
    29.         function arr($q, $assoc = 1) {
    30.             $sth = $this->prepare($q);
    31.             $sth->execute();
    32.             $arr = $sth->fetchAll($assoc ? PDO::FETCH_ASSOC : PDO::FETCH_NUM);
    33.             unset($sth);
    34.             return $arr;
    35.         }
    36.     # столбец
    37.         function row($q) {
    38.             $arr = $this->arr($q);
    39.             if (isset($arr[0]) and is_array($arr[0]))
    40.                 foreach($arr as &$one) $one = reset($one);
    41.             return $arr;
    42.         }
    43.     # хэш
    44.         function ass($q) {
    45.             $arr = array();
    46.             foreach($this->arr($q, 0) as $one) $arr[$one[0]] = $one[1];
    47.             return $arr;
    48.         }
    49.     #
    50.         private function quoteArrayParams($values) {
    51.             foreach ($values as &$value) {
    52.                 if (is_null($value)) $value = 'NULL';
    53.                 elseif (!is_numeric($value)) $value = $this->quote($value);
    54.             }
    55.             return $values;
    56.         }
    57.     # update
    58.         function update($table, $values = array(), $where = '', $limit = null) {
    59.             # значения
    60.                 $values = $this->quoteArrayParams($values);
    61.                 foreach ($values as $key=>&$value) $value = "$key = $value";
    62.                 $values = implode(', ', $values);
    63.             # where
    64.                 $where = empty($where) ? '' : "WHERE $where";
    65.             # limit
    66.                 $limit = is_null($limit) ? '' : "LIMIT $limit";        
    67.             $sql = "UPDATE $table SET $values $where $limit;";
    68.             return $this->e($sql);
    69.         }
    70.     # insert
    71.         function insert($table, $values = array()) {
    72.             $values = $this->quoteArrayParams($values);
    73.             $keys   = implode(', ', array_keys($values));
    74.             $values = implode(', ', $values);
    75.             $sql = "INSERT INTO $table ($keys) VALUES ($values)";
    76.             $insert = $this->e($sql);
    77.             if (!$insert) return $insert;
    78.             return $this->lastInsertId();
    79.         }
    80.     # delete
    81.         function delete($table, $where = null, $limit = null) {
    82.             $where = is_null($where) ? '' : "WHERE $where";
    83.             $limit = is_null($limit) ? '' : "LIMIT $limit";
    84.             $q = "DELETE FROM $table $where $limit";
    85.             return $this->e($q);
    86.         }
    87. }
    88.