За последние 24 часа нас посетили 72505 программистов и 1650 роботов. Сейчас ищут 886 программистов ...

mysql_connect() в отдельный класс

Тема в разделе "PHP для новичков", создана пользователем Беляш, 9 фев 2010.

  1. Беляш

    Беляш Активный пользователь

    С нами с:
    31 янв 2010
    Сообщения:
    20
    Симпатии:
    0
    Начитался в форуме, теперь не дает покоя одна мысль: Стоит ли для подключение к БД создавать отдельный класс вот так, к примеру:

    PHP:
    1. <?php
    2.     class mysql{
    3.         function connect(){
    4.             mysql_connect()
    5.         }
    6.     }
    7. ?>
    или же достаточно того, что предлагает Дмитрий Котеров в своей книге "PHP5 в подлиннике" (всю книгу еще не осилил, но такой подход был предложен в начале "рассказа о MySQL+PHP"):

    PHP:
    1. <?php
    2.         $server='localhost';
    3.         $username='root';
    4.         $pass='pass';
    5.  
    6.         mysql_connect($server, $username, $pass);
    7. ?>
    8.  
    Правильно ли я понял, что в первом случае является плюсом освобождение массива $GLOBALS ?
     
  2. engager

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

    С нами с:
    21 янв 2009
    Сообщения:
    1.106
    Симпатии:
    1
    принципиальной разницы нет.
    все зависит от того, как ты проектируешь свое приложение.
    если использование классов в нем целесообразно (например, оно все основано на классах), то разумнее, конечно, обернуть в класс. в этом же классе удобно реализовать различные методы работы с бд (ну там, select, update etc)
     
  3. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Наговнокодил для примера:

    PHP:
    1. <?php
    2.  
    3.  
    4. class Indic
    5. {
    6.     public static function GetInstance($host, $uname, $upass, $dbname) {
    7.         if(($id = mysql_connect($host, $uname, $upass)) &&
    8.             mysql_select_db($dbname, $id) !== false) {
    9.                 return $id;
    10.         } else throw new Exception(mysql_error($id));
    11.     }
    12. }
    13.  
    14. try {
    15.     $database = Indic::GetInstance("localhost", "root", "password", "an");
    16. } catch(Exception $e) {
    17.     die($e->getMessage());
    18. }
    19.  
    20. ?>
     
  4. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Не, вот примерный говнокод:
    PHP:
    1. <?php
    2. /**
    3.  * @name dbif.inc
    4.  * @copyright Vasilii B. Shpilchin (2009)
    5.  * @package GamEEnG
    6.  *
    7.  * Объектный интерфейс для работы с БД MySQL.
    8.  * Подерживает выборку, запись, обновление, удаление и произвольный запрос.
    9.  * Отдельные методы для таблиц типа MEMORY.
    10.  */
    11.  
    12. class DB
    13. {
    14.         public static $link;
    15.         public static $memory;
    16.         public static $querys_num = 0;
    17.         public static $querys_time = 0;
    18.         private static $microtime = null;
    19.         private static $timer_off = false; // Выключить таймер?
    20.        
    21.         /**
    22.          * Произвольный запрос.
    23.          *
    24.          * @param $query
    25.          */
    26.         public static function query($query)
    27.         {
    28.                 if (empty(self::$link))
    29.                 {
    30.                         SYS::db_connect();
    31.                 }
    32.                 self::timer();
    33.                 $res = mysqli_query(self::$link, $query);
    34.                 self::timer();
    35.                 if (mysqli_errno(self::$link))
    36.                 {
    37.                         throw new exp_db(mysqli_errno(self::$link),
    38.                         mysqli_error(self::$link).'['.$query.']', 'sql_query');
    39.                 }
    40.                 else
    41.                 {
    42.                         return $res;
    43.                 }
    44.         }
    45.        
    46.         /**
    47.          * Выборка из таблицы.
    48.          *
    49.          * @param string $what
    50.          * @param string $table
    51.          * @param array $where (key = поле)
    52.          *
    53.          */
    54.         public static function select($what, $table, $where, $if = 'and')
    55.         {
    56.                 $uwhere = null;
    57.                 for ($i=0; $i<count($where); $i++)
    58.                 {
    59.                         foreach ($where[$i] as $field => $value)
    60.                         {
    61.                                 if (!is_null($uwhere))
    62.                                 {
    63.                                         $uwhere .= " $if ";
    64.                                 }
    65.                                 $uwhere .= $field.'"';
    66.                                 $uwhere .= SYS::escape($value);
    67.                                 $uwhere .= '"';
    68.                         }
    69.                 }
    70.                 $query = 'SELECT '.$what.' FROM `'.$table.'` WHERE '.$uwhere.';';
    71.                 return self::query($query);
    72.         }
    73.        
    74.         /**
    75.          * Запись в таблицу.
    76.          *
    77.          * @param string $table
    78.          * @param array $fields
    79.          * @param array $values
    80.          */
    81.         public static function insert($table, $fields, $values)
    82.         {
    83.                 foreach ($fields as &$field)
    84.                 {
    85.                         $field = '`'.$field.'`';
    86.                 }
    87.                 foreach ($values as &$value)
    88.                 {
    89.                         $value = '"'.SYS::escape($value).'"';
    90.                 }
    91.                 $query = 'INSERT INTO `'.$table.'` ';
    92.                 $query .= '('.implode(',', $fields).') ';
    93.                 $query .= 'VALUES ';
    94.                 $query .= '('.implode(',', $values).')';
    95.                 return self::query($query);
    96.         }
    97.        
    98.         /**
    99.          * Обновление строки/строк.
    100.          *
    101.          * @param string $table
    102.          * @param array $fields
    103.          * @param array $values
    104.          * @param array $where (key = поле)
    105.          */
    106.         public static function update($table, $fields, $values, $where, $if = 'and')
    107.         {
    108.                 foreach ($fields as &$field)
    109.                 {
    110.                         $field = '`'.$field.'`';
    111.                 }
    112.                 foreach ($values as &$value)
    113.                 {
    114.                         $value = '"'.SYS::escape($value).'"';
    115.                 }
    116.                 unset($field);
    117.                 unset($value);
    118.                 $uwhere = null;
    119.                 for ($i=0; $i<count($where); $i++)
    120.                 {
    121.                         foreach ($where[$i] as $field => $value)
    122.                         {
    123.                                 if (!is_null($uwhere))
    124.                                 {
    125.                                         $uwhere .= " $if ";
    126.                                 }
    127.                                 $uwhere .= $field.'"';
    128.                                 $uwhere .= SYS::escape($value);
    129.                                 $uwhere .= '"';
    130.                         }
    131.                 }
    132.                 foreach ($values as $n => $value)
    133.                 {
    134.                         $fields[$n] .= '='.$value;
    135.                 }
    136.                 $query = 'UPDATE `'.$table.'` SET '.implode(',',$fields);
    137.                 $query .= ' WHERE '.$uwhere;
    138.                 $query .= ';';
    139.                 return self::query($query);
    140.         }
    141.        
    142.         /**
    143.          * Удаление строки/строк
    144.          *
    145.          * @param string $table
    146.          * @param array $where (key = поле)
    147.          * @param string $if - условие
    148.          */
    149.         public static function delete($table, $where, $if = 'and')
    150.         {
    151.                 $uwhere = null;
    152.                 foreach ($where as $field => $value)
    153.                 {
    154.                         if (!is_null($uwhere))
    155.                         {
    156.                                 $uwhere .= ' '.$if.' ';
    157.                         }
    158.                         $uwhere .= $field.'"';
    159.                         $uwhere .= SYS::escape($value);
    160.                         $uwhere .= '"';
    161.                 }
    162.                 $query = 'DELETE FROM `'.$table.'` WHERE '.$uwhere.';';
    163.                 return self::query($query);
    164.         }
    165.        
    166.         /**
    167.          * Произвольный запрос (MEMORY)
    168.          *
    169.          * @param $query
    170.          */
    171.         public static function mem_query($table, $query)
    172.         {
    173.                 if (empty(self::$memory))
    174.                 {
    175.                         SYS::init_memory_db($table);
    176.                 }
    177.                 $res = mysqli_query(self::$memory, $query);
    178.                 if (mysqli_errno(self::$memory))
    179.                 {
    180.                         throw new exp_db(mysqli_errno(self::$link),
    181.                         mysqli_error(self::$$link).'['.$query.']', 'sql_query');
    182.                 }
    183.                 else
    184.                 {
    185.                         return $res;
    186.                 }
    187.         }
    188.        
    189.         /**
    190.          * Выборка из таблицы (MEMORY)
    191.          *
    192.          * @param string $what
    193.          * @param string $table
    194.          * @param array $where (key = поле)
    195.          *
    196.          */
    197.         public static function mem_select($what, $table, $where)
    198.         {
    199.                 $uwhere = null;
    200.                 foreach ($where as $field => $value)
    201.                 {
    202.                         if (!is_null($uwhere))
    203.                         {
    204.                                 $uwhere .= ' and ';
    205.                         }
    206.                         $uwhere .= $field.'"';
    207.                         $uwhere .= SYS::escape($value);
    208.                         $uwhere .= '"';
    209.                 }
    210.                 $query = 'SELECT '.$what.' FROM `'.$table.'` WHERE '.$uwhere.';';
    211.                 return self::mem_query($query);
    212.         }
    213.        
    214.         /**
    215.          * Запись в таблицу (MEMORY)
    216.          *
    217.          * @param string $table
    218.          * @param array $fields
    219.          * @param array $values
    220.          */
    221.         public static function mem_insert($table, $fields, $values)
    222.         {
    223.                 foreach ($fields as &$field)
    224.                 {
    225.                         $field = '`'.$field.'`';
    226.                 }
    227.                 foreach ($values as &$value)
    228.                 {
    229.                         $value = '"'.SYS::escape($value).'"';
    230.                 }
    231.                 $query = 'INSERT INTO `'.$table.'` ';
    232.                 $query .= '('.implode(',', $fields).') ';
    233.                 $query .= 'VALUES ';
    234.                 $query .= '('.implode(',', $values).')';
    235.                 return self::mem_query($query);
    236.         }
    237.        
    238.         /**
    239.          * Обновление строки/строк (MEMORY)
    240.          *
    241.          * @param string $table
    242.          * @param array $fields
    243.          * @param array $values
    244.          * @param array $where (key = поле)
    245.          */
    246.         public static function mem_update($table, $fields, $values, $where)
    247.         {
    248.                 foreach ($fields as &$field)
    249.                 {
    250.                         $field = '`'.$field.'`';
    251.                 }
    252.                 foreach ($values as &$value)
    253.                 {
    254.                         $value = '"'.SYS::escape($value).'"';
    255.                 }
    256.                 unset($field);
    257.                 unset($value);
    258.                 $uwhere = null;
    259.                 foreach ($where as $field => $value)
    260.                 {
    261.                         if (!is_null($uwhere))
    262.                         {
    263.                                 $uwhere .= ' and ';
    264.                         }
    265.                         $uwhere .= $field.'"';
    266.                         $uwhere .= SYS::escape($value);
    267.                         $uwhere .= '"';
    268.                 }
    269.                 foreach ($values as $n => $value)
    270.                 {
    271.                         $fields[$n] .= '='.$value;
    272.                 }
    273.                 $query = 'UPDATE `'.$table.'` SET '.implode(',',$fields);
    274.                 $query .= ' WHERE '.$uwhere;
    275.                 $query .= ';';
    276.                 return self::mem_query($query);
    277.         }
    278.        
    279.         /**
    280.          * Удаление строки/строк (MEMORY)
    281.          *
    282.          * @param string $table
    283.          * @param array $where (key = поле)
    284.          */
    285.         public static function mem_delete($table, $where)
    286.         {
    287.                 $uwhere = null;
    288.                 foreach ($where as $field => $value)
    289.                 {
    290.                         if (!is_null($uwhere))
    291.                         {
    292.                                 $uwhere .= ' and ';
    293.                         }
    294.                         $uwhere .= $field.'"';
    295.                         $uwhere .= SYS::escape($value);
    296.                         $uwhere .= '"';
    297.                 }
    298.                 $query = 'DELETE FROM `'.$table.'` WHERE '.$uwhere.';';
    299.                 return self::mem_query($query);
    300.         }
    301.        
    302.         /**
    303.          * Проверка MEMORY-таблицы на существование
    304.          *
    305.          * @param string $table
    306.          * @return boolean
    307.          */
    308.         public static function mem_check($table)
    309.         {
    310.                 $res = mysqli_query(self::$memory, 'show tables');
    311.                 $list = mysqli_fetch_array($res, MYSQLI_NUM);
    312.                 print_r($list); die();
    313.                 if (in_array($table, $list))
    314.                 {
    315.                         return true;
    316.                 }
    317.                 else
    318.                 {
    319.                         return false;
    320.                 }
    321.         }
    322.        
    323.         /**
    324.          * Статистика количества и скорости запросов
    325.          */
    326.         private static function timer()
    327.         {
    328.                 if (self::$timer_off) return false;
    329.                 if (empty(self::$microtime))
    330.                 {
    331.                         self::$microtime = microtime(true);
    332.                         self::$querys_num++;
    333.                 }
    334.                 else
    335.                 {
    336.                         $microtime = microtime(true);
    337.                         self::$querys_time += ($microtime - self::$microtime);
    338.                         self::$microtime = null;
    339.                 }
    340.         }
    341.        
    342.         /**
    343.          * Закрыть все соединения.
    344.          */
    345.         public static function close_all()
    346.         {
    347.                 if(self::$link)
    348.                 {
    349.                         mysqli_close(self::$link);
    350.                 }
    351.                 if (self::$memory)
    352.                 {
    353.                         mysqli_close(self::$memory);
    354.                 }
    355.         }
    356. }
    357. ?>
     
  5. Беляш

    Беляш Активный пользователь

    С нами с:
    31 янв 2010
    Сообщения:
    20
    Симпатии:
    0
    почему "говнокод" ?
     
  6. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Потому что это не ORM, и запросы удобнее писать вручную.
     
  7. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    PHP:
    1. В ту же степь:
    2. <?php
    3.    
    4.     /**
    5.      * Абстрактный класс работы с базой данных. От него наследуют классы для работы с конкретной СУБД.
    6.      *
    7.      * @package classes
    8.      * @subpackage DBClasses
    9.      * @abstract
    10.      */
    11.     abstract class SQLDB {
    12.        
    13.         /**
    14.          * Уникальный идентификатор. Создается фабрикой.
    15.          * @access protected
    16.          * @var string
    17.          */
    18.         protected $factId;
    19.        
    20.         /**
    21.          * Singleton
    22.          * @static
    23.          * @access protected
    24.          * @var object
    25.          */
    26.         static protected $instance;
    27.    
    28.         /**
    29.          * Определяет нужно ли производить перекодирование между БД и сайтом
    30.          * @access protected
    31.          * @var boolean
    32.          */
    33.         protected $needEnc;
    34.        
    35.         /**
    36.          * Кодировка БД
    37.          * @access protected
    38.          * @var string
    39.          */
    40.         protected $encDB;
    41.  
    42.         /**
    43.          * Кодировка сайта
    44.          * @access protected
    45.          * @var string
    46.          */
    47.         protected $encFile;
    48.        
    49.         /**
    50.          * Адрес сервера БД
    51.          * @access protected
    52.          * @var string
    53.          */
    54.         protected $host;
    55.        
    56.         /**
    57.          * Логин
    58.          * @access protected
    59.          * @var string
    60.          */
    61.         protected $login;
    62.        
    63.         /**
    64.          * Пароль
    65.          * @access protected
    66.          * @var string
    67.          */
    68.         protected $pass;
    69.        
    70.         /**
    71.          * База данных
    72.          * @access protected
    73.          * @var string
    74.          */
    75.         protected $db;
    76.  
    77.         /**
    78.          * Определяет показывать ли sql запросы
    79.          * @access protected
    80.          * @var boolean
    81.          */
    82.         protected $sqlShow;
    83.    
    84.         /**
    85.          * Определяет логировать ли sql запросы
    86.          * @access protected
    87.          * @var boolean
    88.          */
    89.         protected $sqlLog;
    90.        
    91.         /**
    92.          * Определяет проверять ли на наличие union
    93.          * @access protected
    94.          * @var boolean
    95.          */
    96.         protected $checkU;
    97.    
    98.         /**
    99.          * Определяет проверять ли на наличие присоединенных запросов
    100.          * @access protected
    101.          * @var boolean
    102.          */
    103.         protected $checkD;
    104.        
    105.         /**
    106.          * Ссылка на открытое соединение с БД
    107.          * @access protected
    108.          * @var resource
    109.          */
    110.         protected $link;
    111.  
    112.         /**
    113.          * Результат запроса
    114.          * @access protected
    115.          * @var resource
    116.          */
    117.         protected $res;
    118.        
    119.         /**
    120.          * Последний запрос
    121.          * @access protected
    122.          * @var string
    123.          */
    124.         protected $sql;
    125.        
    126.         /**
    127.          * Символ для обрамления ключа слева.
    128.          *
    129.          * Символ для обрамления ключа слева(Left Key Symbol).  
    130.          * Используется в {@link escapeKeys}
    131.          * @access protected
    132.          * @var string
    133.          */
    134.         protected $LKS="";
    135.        
    136.         /**
    137.          * Символ для обрамления ключа справа.
    138.          *
    139.          * Символ для обрамления ключа справа(Right Key Symbol).  
    140.          * Используется в {@link escapeKeys}
    141.          * @access protected
    142.          * @var string
    143.          */
    144.         protected $RKS="";
    145.        
    146.                                             ////////////////////////////
    147.                                             //Абстрактные методы//
    148.                                             ////////////////////////////
    149.        
    150.         /**
    151.          * Закрывает соединение
    152.          */
    153.         abstract protected function closeConnection();
    154.        
    155.         /**
    156.          * Выполняет запрос $sql.
    157.          *
    158.          * @access protected
    159.          * @param string $sql запрос для выполнения
    160.          * @return resource результат выпонения запроса
    161.          */
    162.         abstract protected function query($sql);
    163.        
    164.         /**
    165.          * Возвращает код последней ошибки
    166.          *
    167.          * @return string Код последней ошибки
    168.          */
    169.         abstract public function getErrorCode();
    170.        
    171.         /**
    172.          * Возвращает последнее сообщение об ошибке
    173.          *
    174.          * @return string Сообщение об ошибке
    175.          */
    176.         abstract public function getErrorMsg();
    177.        
    178.         /**
    179.          * Возвращает id только что добавленной записи.
    180.          *
    181.          * @access protected
    182.          * @return int id только что добавленной записи
    183.          */
    184.         abstract protected function getLastID();
    185.        
    186.         /**
    187.          * Возвращает количество строк, обработанных последним запросом.
    188.          *
    189.          * @access protected
    190.          * @return int количество строк, обработанных последним запросом
    191.          */
    192.         abstract protected function affectRows();
    193.  
    194.         /**
    195.          * Начинает транзакцию
    196.          *
    197.          * Отключает autocommit и посылает серверу команду начать транзакцию.
    198.          */
    199.         abstract public function startTran();
    200.  
    201.         /**
    202.          * Подтверждает транзакцию
    203.          *
    204.          * Подтверждает транзакцию и включает autocommit.
    205.          */
    206.         abstract public function commit();
    207.  
    208.         /**
    209.          * Откатывает транзакцию
    210.          *
    211.          * Производит откат транзакции и включает autocommit.
    212.          */
    213.         abstract public function rollback();
    214.  
    215.         /**
    216.          * Возвращает очередную строку из результата запроса в виде ассоциативного массива
    217.          *
    218.          * @param resource $res Если параметр $res задан, то строка берется из него, в противном случае строка берется из $this->res
    219.          * @return array Ассоциативный массив, содержащий значения из очередной строки результата
    220.          */
    221.         abstract public function fetchAssoc($res=null);
    222.  
    223.         /**
    224.          * Возвращает очередную строку из результата запроса в виде объекта
    225.          *
    226.          * @param resource $res Если параметр $res задан, то строка берется из него, в противном случае строка берется из $this->res
    227.          * @return array Объект, содержащий значения из очередной строки результата
    228.          */
    229.         abstract public function fetchObj($res=null);
    230.  
    231.         /**
    232.          * Возвращает очередную строку из результата запроса в виде пронумерованного массива
    233.          *
    234.          * @param resource $res Если параметр $res задан, то строка берется из него, в противном случае строка берется из $this->res
    235.          * @return array Пронумерованный массив, содержащий значения из очередной строки результата
    236.          */
    237.         abstract public function fetchRow($res=null);
    238.  
    239.         /**
    240.          * Возвращает единственное значение из результата запроса
    241.          *
    242.          * Этот метод следует использовать, когда ожидется выбор единственного значения
    243.          *
    244.          * @param resource $res Если параметр $res задан, то строка берется из него, в противном случае строка берется из $this->res
    245.          * @return mixed Значение из результата запроса
    246.          */
    247.         abstract public function fetchField($res=null);
    248.  
    249.         /**
    250.          * Обрабатывает спецсимволы в строке для безопасного ее использования в запросе
    251.          *
    252.          * @param mixed $str Строка, в которой надо экранировать спецсимволы или число или null.
    253.          * @return mixed Строка с экранированными спецсимволы, или число или строка "null".
    254.          */
    255.         abstract public function escapeString($str);
    256.  
    257.                                             ////////////////////////////
    258.                                             //Магические методы//
    259.                                             ///////////////////////////
    260.  
    261.         /**
    262.          * Запрещение клонирования
    263.          * @throws Exception Клонирование запрещено
    264.          */
    265.         public function __clone(){
    266.             throw new Exeption('Клонирование запрещено!');
    267.         }
    268.  
    269.        
    270.         /**
    271.          * Преобразует объект в строковое представление.
    272.          * @return string Строковое представление объекта
    273.          */
    274.         public function __toString(){
    275.             return get_class($this)."://$login:$pass@$host/$db";
    276.         }
    277.  
    278.         /**
    279.          * Деструктор.
    280.          *
    281.          *  Закрывает соединение. Удаляет себя из списка фабрики.
    282.          */
    283.         public function __destruct(){
    284.             $this->rollback();
    285.             $this->closeConnection();
    286.             SQLDBFactory::unsetDB($this->factId);
    287.         }
    288.                                             ////////////////////
    289.                                             //Сеттеры, геттеры//
    290.                                             ////////////////////
    291.         /**
    292.          * Устанавливает значение {@link factId}
    293.          * @param string $id Новый идентификатор
    294.          */
    295.         public function setId($id){...}
    296.        
    297.         /**
    298.          * Возвращает значение {@link factId}
    299.          * @return string Текущий идентификатор
    300.          */
    301.         public function getId(){...}
    302.        
    303.         /**
    304.          * Конфигурирует объект в соответствии с массивом конфигурации
    305.          * @throws FormatException
    306.          * @param array $config Массив для установки конфигурации.
    307.          */
    308.         protected function setConfig($config){...}
    309.        
    310.        
    311.         /**
    312.          * Возвращает текущую конфигурацию объекта
    313.          * @return array массив с конфигурационными переменными
    314.          */
    315.         public function getConfig(){...}
    316.        
    317.         /**
    318.          * Возвращает последний запрос.
    319.          * @return string Последний запрос
    320.          */
    321.         public function getLastQuery(){...}
    322.                                                     //////////////
    323.                                                     //Запросы//
    324.                                                     //////////////
    325.         /**
    326.          * Выполняет запрос select.
    327.          *
    328.          * Выполняет запрос $sql. Запрос должен быть запросом типа select.
    329.          * Для предотвращения несанкционированных действий
    330.          * перед выполнением запрос проверяется на наличие оператора union.
    331.          * Если оператор union будет найден, то будет выброшено исключение.
    332.          * Если в запросе необходимо использовать оператор union,
    333.          * то количество таких операторов нужно указать в параметре $numUnion.
    334.          * @throws SqlException, FormatException
    335.          * @param string $sql Запрос для выполнения
    336.          * @param int $numUnion Количество операторов union в запросе.
    337.          * @return resource Результат запроса
    338.          */                                                
    339.         public function select($sql, $numUnion=0){
    340.             $sql=$this->getSelect($sql, $numUnion=0);
    341.             $this->exec($sql);
    342.             return $this->res;
    343.         }
    344.  
    345.         /**
    346.          * Выполняет вставку строки в таблицу.
    347.          *
    348.          * @throws SqlException
    349.          * @param mixed $arr Если $arr массив, то ключи массива трактуются как поля таблицы,
    350.          * а соответствующие значения как значения этих полей. Значения проходят обработку {@link escapeString}
    351.          * Если $arr это строка, то она трактуется как sql-запрос для выполнения.  
    352.          * @param string $tab Таблица, в которую нужно вставить значения.
    353.          * @return mixed id только что вставленной записи
    354.          */
    355.         public function insert($arr, $tab=null){
    356.             $sql=$this->getInsert($arr, $tab);
    357.             $this->exec($sql);
    358.             return $this->getLastID();
    359.         }
    360.  
    361.         /**
    362.          * Выполняет обновление данных в таблице.
    363.          *
    364.          * @throws SqlException, FormatException
    365.          * @param mixed $arr Если $arr массив, то ключи массива трактуются как поля таблицы,
    366.          * а соответствующие значения как значения этих полей.
    367.          * Если $arr это строка, то она трактуется как sql-запрос для выполнения.  
    368.          * @param string $tab Таблица, в которой выполняется обновление.
    369.          * @param mixed $where Условие, при котором выполняется обновление, или id записи для обновления
    370.          * @return int Количество обновленных строк.
    371.          */
    372.         public function update($arr, $tab=null, $where=null){
    373.             $sql=$this->getUpdate($arr, $tab, $where);
    374.             $this->exec($sql);
    375.             return $this->affectRows();
    376.         }
    377.  
    378.         /**
    379.          * Выполняет удаление из таблицы.
    380.          *
    381.          * @throws SqlException, FormatException
    382.          * @param string $tab Таблица из которой удалять или sql-запрос.
    383.          * @param mixed $where Если $where - целое,
    384.          * то переменная трактуется как значение id, той строки которую надо удалить.
    385.          * Если $where строка, то переменна трактуется как усовие удаления строки.
    386.          * Если $where ничего из вышеперечисленного, то $tab считается sql-запросом.
    387.          * @return int Количество удаленных строк.
    388.          */
    389.         public function delete($tab, $where=null){
    390.             $sql=$this->getDelete($tab, $where);
    391.             $this->exec($sql);
    392.             return $this->affectRows();
    393.         }
    394.        
    395.                                                 //////////////////////////
    396.                                                 //Запросы значений//
    397.                                                 //////////////////////////
    398.         /**
    399.          * Возвращает первую строку из результата запроса $sql в виде ассоциативного массива.
    400.          *
    401.          * @throws SqlException, FormatException
    402.          * @param string $sql Запрос для выполнения
    403.          * @param int $numUnion Количество операторов union в запросе
    404.          * @return array Ассоциативный массив, содержащий значения из первой строки результата запроса
    405.          */
    406.         public function getAssoc($sql,$numUnion=0){...}
    407.  
    408.         /**
    409.          * Возвращает первую строку из результата запроса $sql в виде пронумированного массива.
    410.          *
    411.          * @throws SqlException, FormatException
    412.          * @param string $sql Запрос для выполнения
    413.          * @param int $numUnion Количество операторов union в запросе
    414.          * @return array Пронумированный массив, содержащий значения из первой строки результата запроса
    415.          */
    416.         public function getRow($sql,$numUnion=0){...}
    417.  
    418.         /**
    419.          * Возвращает первый столбец из результата запроса $sql в виде пронумированного массива.
    420.          *
    421.          * @throws SqlException, FormatException
    422.          * @param string $sql Запрос для выполнения
    423.          * @param int $numUnion Количество операторов union в запросе
    424.          * @return array Пронумированный массив, содержащий значения из первого столбца результата запроса
    425.          */
    426.         public function getColumn($sql,$numUnion=0){...}
    427.        
    428.         /**
    429.          * Возвращает первую строку из результата запроса $sql в виде объекта
    430.          *
    431.          * @throws SqlException, FormatException
    432.          * @param string $sql Запрос для выполнения
    433.          * @param int $numUnion Количество операторов union в запросе
    434.          * @return object Объект, содержащий значения из первой строки результата запроса
    435.          */
    436.         public function getObj($sql,$numUnion=0){...}
    437.        
    438.         /**
    439.          * Возвращает единственное значение из результата запроса $sql.
    440.          *
    441.          * @throws SqlException, FormatException
    442.          * @param string $sql Запрос для выполнения
    443.          * @param int $numUnion Количество операторов union в запросе
    444.          * @return mixed Значение из первой строки результата запроса
    445.          */
    446.         public function getVal($sql,$numUnion=0){...}
    447.        
    448.         /**
    449.          * Возвращает единственное значение из результата запроса $sql.
    450.          *
    451.          * В отличии от {@link getVal} функция вызывает не {@link select}, а непосредственно {@link exec}.
    452.          * Таким образом запрос не проверяется. Также запрос не сохраняется в свойство {@link sql}.
    453.          *
    454.          * @access protected
    455.          * @throws SqlException, FormatException
    456.          * @param string $sql Запрос для выполнения
    457.          * @return mixed Значение из первой строки результата запроса
    458.          */
    459.         protected function getSystemVal($sql){...}
    460.        
    461.                                                         ////////////////////////////
    462.                                                         //Подгтовка запросов//
    463.                                                         ///////////////////////////
    464.         /**
    465.          * Проверяет запрос select.
    466.          * @see select
    467.          * @throws SqlException, FormatException
    468.          * @param string $sql Запрос для проверки
    469.          * @param int $numUnion Количество операторов uniond в запросе
    470.          * @return string Проверенный запрос
    471.          */
    472.         public function getSelect($sql, $numUnion=0){
    473.             $sql=trim($sql);
    474.             $this->checkQuery($sql, $numUnion);
    475.             $this->checkSelect($sql);
    476.             return $sql;
    477.         }
    478.  
    479.         /**
    480.          * Формирует и проверяет запрос insert.
    481.          * @see insert
    482.          * @throws SqlException, FormatException
    483.          * @param mixed $arr Запрос для проверки или массив со значениями
    484.          * @param string $tab Таблица для вставки значения
    485.          * @return string Проверенный запрос
    486.          */
    487.         public function getInsert($arr, $tab=null){
    488.             $sql="";
    489.             if (is_array($arr)){
    490.                 // Если таблица задана неверно, то выбросить исключение
    491.                 if (empty($tab)  || !is_string($tab)) throw new FormatException("Не задана таблица для вставки строки","Неверный тип данных");
    492.                
    493.                 $keys="";
    494.                 $vals="";
    495.                 $keys="(".implode(",",array_keys($arr)).")"; // Создаем строку с именами полей
    496.  
    497.                 // Создаем строку со значениями полей
    498.                 foreach($arr as $key=>$val){
    499.                     $keys .=$this->escapeKeys($key).",";
    500.                     $vals .=$this->escapeString($val).",";
    501.                 }
    502.                 $vals="(".trim($vals,",").")";
    503.                 $keys="(".trim($keys,",").")";
    504.                
    505.                 //Создаем запрос
    506.                 $sql="insert into ".$tab.$keys." values".$vals;
    507.             }
    508.             else{
    509.                 $sql=trim($arr."");
    510.             }
    511.  
    512.             $this->checkQuery($sql);
    513.             $this->checkInsert($sql);
    514.             return $sql;
    515.         }
    516.  
    517.         /**
    518.          * Формирует и проверяет запрос update.
    519.          * @see update
    520.          * @throws SqlException, FormatException
    521.          * @param mixed $arr Запрос для проверки или массив со значениями
    522.          * @param string $tab Таблица, в которой обновляются значения
    523.          * @param string $where Условие, по которому обновляются значения, или id записи для обновления
    524.          * @return string Проверенный запрос
    525.          */
    526.         public function getUpdate($arr, $tab=null, $where=null){
    527.             $sql="";
    528.             if (is_array($arr)){
    529.                 if (empty($tab)  || !is_string($tab)) throw new FormatException("Не задана таблица для вставки строки","Неверный тип данных");
    530.                
    531.                 $sets=$this->getAssignmentString($arr, ",");
    532.  
    533.                 //Определяем условие обновления
    534.                 if (is_array($where)){
    535.                     $expr=" where ".$this->getAssignmentString($where, " and");
    536.                 }
    537.                 elseif (is_int($where)){
    538.                     $expr=" where id=".$where;
    539.                 }
    540.                 elseif (!empty($where)) {
    541.                     $expr= " where ".$where;
    542.                 }
    543.                 else{
    544.                      $expr='';
    545.                 }
    546.                
    547.                 $sql="update $tab set".$sets.$expr; //Создаем запрос
    548.             }
    549.             else{
    550.                 $sql=trim($arr."");
    551.             }
    552.  
    553.             $this->checkQuery($sql);
    554.             $this->checkUpdate($sql);
    555.             return $sql;
    556.         }
    557.  
    558.         /**
    559.          * Формирует и проверяет запрос delete.
    560.          * @see delete
    561.          * @throws SqlException, FormatException
    562.          * @param string $tab Запрос для проверки или таблица, в которой обновляются значения
    563.          * @param mixed $where Условие, при котором удаляется запись, или id записи для удаления
    564.          * @return string Проверенный запрос
    565.          */
    566.         public function getDelete($tab, $where=null){
    567.             $sql="";
    568.             if (is_int($where)){
    569.                 $sql="delete from $tab where id=".$where;
    570.             }
    571.             elseif (is_string($where)){
    572.                 $sql="delete from $tab where ".$where;
    573.             }
    574.             else{
    575.                 $sql=trim($tab."");
    576.             }
    577.  
    578.             $this->checkQuery($sql);
    579.             $this->checkDelete($sql);
    580.             return $sql;
    581.         }
    582.        
    583.         /**
    584.          * Подготовливает выполнение sql-запроса
    585.          *
    586.          * Функция запоминает sql-запрос в свойстве класса.
    587.          * Логирует и выводит его на экран, если это указано в настройках  $vf["db"]["sqlLog"] и $vf["db"]["sqlShow"].
    588.          * Производит перекодировку запроса, если нужно.
    589.          * Выбрасывает исключение в случае ошибки на sql-сервере.
    590.          *
    591.          * @access protected
    592.          * @param string sql-запрос для выполнения
    593.          */
    594.         protected function exec($sql, $save=true){
    595.             global $vf;
    596.             if ($save){
    597.                 $this->sql=$sql;
    598.             }
    599.             if ($vf["db"]["sqlShow"]) echo $sql, "<br>";
    600.             if ($vf["db"]["sqlLog"]) logMsg($sql,"SQL Log","sqlLog");
    601.             if ($this->needEnc){
    602.                 $sql = iconv($this->encFile, $this->encDB,$sql);
    603.             }
    604.             $this->res=$this->query($sql);
    605.             if (!$this->res){
    606.                 throw new SqlException($this->getErrorCode()." ".$this->getErrorMsg(), "Ошибка на сервере", $sql);
    607.             }
    608.         }
    609.        
    610.         /**
    611.          * Функция создает строку присвоения/сравнения из массива.
    612.          *
    613.          * Функция создает строку присвоения/сравнения из массива.
    614.          * Ключи массива трактуются как поля таблицы, а соответствующие значения, как те значения которые нужно присвоить/сравнить.
    615.          * <code>
    616.          * <?php
    617.          * $arr["id"]=50;
    618.          * $arr["title"]="Новая книга";
    619.          * $arr["izd"]=null;
    620.          *
    621.          * $DB->SQLDBFactory::getDB();
    622.          * $str=$DB->getAssignmentString($arr, ",");
    623.          * echo $str;
    624.          * ?>
    625.          * </code>
    626.          *
    627.          *
    628.          * @param array $arr Массив из которого нужно сделать строку присвоения/сравнения
    629.          * @param string $delim Строка, которая вставляется между ассоциированными парами.
    630.          * @return string Искомая строка
    631.          */
    632.         protected function getAssignmentString($arr, $delim){
    633.             $rez="";
    634.             foreach($arr as $key=>$val){
    635.                 $rez .= $this->escapeKeys($key)."=".$this->escapeString($val).$delim;
    636.             }
    637.             $rez=substr($rez,0,-strlen($delim));
    638.             return $rez;
    639.         }
    640.  
    641.                                                         ///////////////////////////
    642.                                                         //Служебные методы//
    643.                                                         ///////////////////////////
    644.        
    645.         /**
    646.          * Обрамляет имя поля в специальные символы.
    647.          *
    648.          * В большинстве БД для использования некоторых символов (например, пробелов) в имени поля нужно все поле обрамить спецсимволами.
    649.          * Именно это и делает данная функция
    650.          *
    651.          * @param string $str Имя поля
    652.          * @return string имя поля заключенное в спецсимволы
    653.          */
    654.         public function escapeKeys($key){...}
    655.  
    656.                                                         //////////////////////////
    657.                                                         //Перекодирование//
    658.                                                         /////////////////////////
    659.        
    660.         /**
    661.          * Запоминает кодироки сайта и БД для перекодирования запросов и их результатов
    662.          * @throws FormatException
    663.          * @param string $encFile Кодировка сайта
    664.          * @param string $encDB Кодировка БД
    665.          */
    666.         public function setEncodings($encFile, $encDB){...}
    667.        
    668.                                                             ////////////////
    669.                                                             //Проверки//
    670.                                                             ///////////////
    671.        
    672.         /**
    673.          * Проверяет запрос
    674.          * @throws SqlException, FormatException
    675.          * @param string $sql Запрос для проверки
    676.          * @param int $unionCol Количество операторов union
    677.          */
    678.         protected function checkQuery($sql, $numUnion=0){
    679.             if (!is_string($sql)) throw new FormatException("В качестве запроса передана не строка", "Неверный тип данных");
    680.                 $this->checkDoubleTir($sql);
    681.                 $this->checkDoubleQuery($sql,$numUnion);
    682.         }
    683.  
    684.        
    685.         /**
    686.          * Проверяет есть ли в запросе два тире подряд или /*
    687.          * @throws SqlException
    688.          * @param string $sql Запрос для проверки
    689.          */
    690.         protected function checkDoubleTir($sql){...}
    691.        
    692.         /**
    693.          * Проверка на вложенный или присоединенный запрос
    694.          * @throws SqlException
    695.          * @param string $sql Запрос для проверки
    696.          * @param int $unionCol Количество операторов union
    697.          */
    698.         protected function checkDoubleQuery($sql,$unionCol=0){...}
    699.        
    700.         /**
    701.          * Проверка того, что запрос является запросом Select
    702.          *
    703.          * @throws SqlException
    704.          * @param string $sql Запрос для проверки
    705.          */
    706.         protected function checkSelect($sql){...}
    707.        
    708.         /**
    709.          * Проверка того, что запрос является запросом Insert
    710.          *
    711.          * @throws SqlException
    712.          * @param string $sql Запрос для проверки
    713.          */
    714.         protected function checkInsert($sql){...}
    715.  
    716.         /**
    717.          * Проверка того, что запрос является запросом Update
    718.          *
    719.          * @throws SqlException
    720.          * @param string $sql Запрос для проверки
    721.          */
    722.         protected function checkUpdate($sql){...}
    723.        
    724.         /**
    725.          * Проверка того, что запрос является запросом Delete
    726.          *
    727.          * @throws SqlException
    728.          * @param string $sql Запрос для проверки
    729.          */
    730.         protected function checkDelete($sql){...}
    731.        
    732.         /**
    733.          * Функция возвращает true, если данные в позиции $otkuda из строки $gde не взяты в одинарные кавычки
    734.          *
    735.          * @param string $gde Строка в которой происходит проверка
    736.          * @param int $otkuda Позиция для которой происходит проверка
    737.          * @return boolean Резултат проверки
    738.          */
    739.         protected function notInQutes($gde,$otkuda){...}
    740. ?>
     
  8. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    славный говнокод