За последние 24 часа нас посетили 17542 программиста и 1719 роботов. Сейчас ищут 1625 программистов ...

Оцените + укажите на недостатки

Тема в разделе "PHP для новичков", создана пользователем dark991, 29 мар 2008.

  1. dark991

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

    С нами с:
    23 апр 2006
    Сообщения:
    27
    Симпатии:
    0
    Адрес:
    Москва
    замутил для своего сайтика фишку...

    PHP:
    1.  
    2. <?php
    3.     function log ($trigger, $query = "", $output = true) {
    4.  
    5.          // Путь к файлу
    6.             $log = "./logs/error.mysql.log";
    7.  
    8.         // Формируем запись с ошибкой в лог-файл
    9.             $error = "\r\n[" . date("d.m.Y H:i:s") . "] ";
    10.             if ($trigger == "105:1") {
    11.                 $error .= "Неверные параметры подключения или сервер базы данных временно не доступен";
    12.             } elseif ($trigger == "105:2") {
    13.                 $error .= "Невозможно подключиться к БД \"" . MYSQL_DB . "\"";
    14.             } elseif ($trigger == "105:3") {
    15.                 $error .= "Невозможно выполнить запрос к БД \"" . MYSQL_DB . "\": " . $query;
    16.             }
    17.             $error .= " - " . mysql_error ();
    18.  
    19.         // Запись в файл $log
    20.             $open = @fopen ($log, "a") or die ("Разрешите доступ на запись файлу \"./logs/error.mysql.log\"");
    21.             $write = @fwrite ($open, $error) or die ("Ошибка записи в файл \"./logs/error.mysql.log\"");
    22.             $close = @fclose ($open) or die ("Ошибка закрытия файла \"./logs/error.mysql.log\"");
    23.  
    24.         // Выводим сообщение об ошибке в браузер
    25.             $output = "<html>\n<head>\n<title>GRAMMONE™ - Ошибка</title>\n" .
    26.             "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">\n" .
    27.             "<link rel=\"StyleSheet\" href=\"./style.css\" type=\"text/css\">\n" .
    28.             "</head>\n<body>\n";
    29.             if ($trigger == "105:1") {
    30.                 $output .= "<p align=\"center\">\n<img border=\"0\" src=\"./images/105-1.gif\" width=\"200\" height=\"200\" alt=\"Сервер базы данных временно не доступен: 105-1\">\n</p>\n<p align=\"center\">Сервер базы данных временно не доступен\n<br>\nПросим зайти на сайт через 15 минут</p>\n</body>\n</html>";
    31.             } elseif ($trigger == "105:2") {
    32.                 $output .= "<p align=\"center\">\n<img border=\"0\" src=\"./images/105-1.gif\" width=\"200\" height=\"200\" alt=\"Базы данных временно не доступна: 105-2\">\n</p>\n<p align=\"center\">База данных временно не доступна\n<br>\nПросим зайти на сайт через 15 минут</p>\n</body>\n</html>";
    33.             } elseif ($trigger == "105:3") {
    34.                 $output .= "<p align=\"center\">\n<img border=\"0\" src=\"./images/105-1.gif\" width=\"200\" height=\"200\" alt=\"Ошибка выполнения запроса: 105-3\">\n</p>\n<p align=\"center\">Ошибка выполнения запроса к БД\n<br>\nПожалуйста, повторите операцию</p>\n</body>\n</html>";
    35.             }
    36.  
    37.             return $output;
    38.  
    39.     }
    40. ?>
    41.  
    Создание запроса в БД с учетом возможных ошибок в SQL
    PHP:
    1. <?php
    2. $sql = "SELECT * FROM table WHERE col=1";
    3. $mq = mysql_query ($sql) or die ($mysql->log ("105:3", $query));
    4. ?>
    5.  
    Если в этом SQL Запросе есть ошибка - выводитя:
    и скрипт прекращает работу, предварительно записав ошибку в лог..

    ПРОШУ ОЦЕНИТЬ И УКАЗАТЬ НА НЕДОСТАТКИ
     
  2. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Если в запросе содержится ошибка, то сколько его ни повторяй, правильным он от этого не станет.
    В лог должен идти не только сам запрос, но и код ошибки, который должен быть получен из смой базы, а не вбит вручную.

    И еще... Если log это метод объекта бд, то почему запросы идут не через этот объект?

    Странно, почему мы пытаемся скрыть ошибки бд, но всячески пытаемся показать ошибки файловой системы?

    file_put_contents($fileaddr, $text, FILE_APPEND);
     
  3. Clone

    Clone Guest

    Блин, давно бы пора задаться вопросом: а почему бы не юзать класс-обёртку для работы с БД? И уже там бы можно было без проблем внедрить логгирование ошибок SQL, а не городить огород типа $mq = mysql_query ($sql) or die ($mysql->log ("105:3", $query));
    ИМХО.
     
  4. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    PHP:
    1. <?php
    2. class MyDb {
    3. //...
    4.     function query() {
    5.     //...
    6.         if (!($res = mysql_query($query))) {
    7.             throw new MyDbQueryException('Error "' . mysql_error() . '" in query "' . $query . '"');
    8.         }
    9.     //...
    10.     }
    11. //...
    12. }
     
  5. dark991

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

    С нами с:
    23 апр 2006
    Сообщения:
    27
    Симпатии:
    0
    Адрес:
    Москва
    можно отслеживать изменения в логе... разными способами ) предполагаю (поскольку проект небоьшой), за 15 минут ошибка будет устранена
    исправлю ))
    эмм.ммм.... )))
    эта ошибка (как предполагается) может выскачить только один раз, при установке скрипта на хостинг, если с файлом error.log что-то случится... вероятность возникновения ошибки у пользователей сводится к минимуму...
    исправлю

    неохота полный класс писать, а чужие юзать не могу, т.к. не понимаю в них ниче.... ))) хотя в принцепе согласен

    ну опять таки согласен ))
     
  6. Clone

    Clone Guest

    Ну не знаю, мне хватило дня на написание и тестирование, плюс потом ещё по ходу пара исправлений, добавление функционала... Но всё равно клёво получилось. И удобно. Так что, имхо, лучше побороть свою лень - потом меньше переписывать:)
     
  7. zorba-buddha

    zorba-buddha Активный пользователь

    С нами с:
    28 мар 2008
    Сообщения:
    42
    Симпатии:
    0
    Адрес:
    Подольск
    как-то писал и до сих пор использую с небольшими модификациями (может кому понадобиться):
    PHP:
    1. <?php
    2. /*
    3. работа с БД MySQL
    4.  
    5. my_db = new DB('адрес_сервера', 'порт', 'имя_пользователя', 'пароль', 'имя_базы');
    6. создаем класс и одновременно коннектимся к базе с заданными параметрами
    7.  
    8. my_db->send_query('sql_string');
    9. послать запрос и получить результат
    10. возвращает массив с символьными индексами "num_rows" и "last_insert_id" в которых
    11. указано кол-во строк и последний всталвенный INSERT'ом ID (автоинкремент) соответственно,
    12. в индексном массиве содержиться результат запроса
    13.  
    14. my_db->close();
    15. закрывает коннект и уничтожает созданный класс.
    16. */
    17. class DB {
    18.     var $connection;
    19.     var $last_query;
    20.     var $last_result;
    21.    
    22.     function __construct($_server = 'localhost', $_port = '3306', $_user = '', $_password = '', $_DBName = '') {
    23.         if ($this->connection = @mysql_connect($_server.':'.$_port, $_user, $_password)) {
    24.             $this->client_encoding  = mysql_client_encoding($this->connection);
    25.            
    26.             if (mysql_select_db($_DBName)) {
    27.                 mysql_query("set character_set_client='cp1251'");
    28.                 mysql_query("set character_set_results='cp1251'");
    29.                 mysql_query("set collation_connection='cp1251_general_ci'");
    30.                
    31.                 return true;
    32.             };
    33.         };
    34.        
    35.         $this->error(mysql_error(), mysql_errno());
    36.     }
    37.    
    38.     function DB($_server = 'localhost', $_port = '3306', $_user = '', $_password = '', $_DBName = '') {
    39.         $this->__construct($_server, $_port, $_user, $_password, $_DBName);
    40.     }
    41.    
    42.     function send_query($query = NULL, $_xml_name = NULL, &$_return_container = NULL) {
    43.         $this->last_query   = $query;
    44.         $result             = @mysql_query($this->last_query, $this->connection);
    45.        
    46.         if (mysql_error()) {
    47.             $this->error(mysql_error(), mysql_errno());
    48.         };
    49.        
    50.         $this->last_result = Array(
    51.             'last_insert_id'    => @mysql_insert_id(),
    52.             'num_rows'          => @mysql_num_rows($result)
    53.         );
    54.        
    55.         if ($this->last_result['num_rows'] >= 1) {
    56.             while($row = @mysql_fetch_array($result, MYSQL_ASSOC)) {
    57.                 $this->last_result[] = $row;
    58.             };
    59.         };
    60.        
    61.         @mysql_free_result($result);
    62.         return $this->last_result;
    63.     }
    64.    
    65.     function error($_errmess, $_errno) {
    66.         // допишите свой обработчик ошибки
    67.     }
    68.    
    69.     function close() {
    70.         $this->__destruct();
    71.     }
    72.    
    73.     function __destruct() {
    74.         @mysql_close($this->connection);
    75.     }
    76. };
    77. ?>
     
  8. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    dark991
    Честно говоря не понравилось.
    Но это моя субъективная оценка.
    Не понравился стиль :)
     
  9. Clone

    Clone Guest

    Эх, ну вот мой на растерзание:
    PHP:
    1. <?php
    2.  
    3. // Database working class
    4.  
    5. Class DB
    6. {
    7.   // mysql resource var
    8.   private static $_resource;
    9.  
    10.   // mysql database name
    11.   private static $_db_name;
    12.  
    13.   private static function _buildOrderBy($order_by)
    14.   {
    15.     if (is_array($order_by))
    16.     {
    17.       $order_by_building = array();
    18.       foreach ($order_by as $key => $value)
    19.       {
    20.         if (is_string($key) && in_array($value, array('ASC', 'DESC')))
    21.           $order_by_building[] = '`'.$key.'` '.(string)$value;
    22.         elseif (strpos($value, '(') !== false && strpos($value, ')') !== false)
    23.           $order_by_building[] = self::_checkValue($value);
    24.       }
    25.       return implode(', ', $order_by_building);
    26.     }
    27.     elseif (strpos($order_by, '(') !== false && strpos($order_by, ')') !== false)
    28.       return (string)$order_by;
    29.     else
    30.       return (string)'`'.$order_by.'`';
    31.   }
    32.  
    33.   private static function _buildWhere($where)
    34.   {
    35.     if (is_array($where))
    36.     {
    37.       $where_building = array();
    38.       foreach ($where as $key => $value)
    39.       {
    40.         if (is_string($key))
    41.         {
    42.           if (is_array($value) && isset($value[0]) && isset($value[1]))
    43.             $where_building[] = '`'.$key.'`'.$value[0].self::_checkValue($value[1]);
    44.           else
    45.             $where_building[] = '`'.$key.'`='.self::_checkValue($value);
    46.         }
    47.         else
    48.           $where_building[] = (string)$value;
    49.       }
    50.       return implode(' AND ', $where_building);
    51.     }
    52.     else
    53.       return (string)$where;
    54.   }
    55.  
    56.   private static function _checkValue($value, $type = 'string')
    57.   {
    58.     $value = (string)$value;
    59.     if (is_int($value) || is_float($value) || (strpos($value, '(') !== false && strpos($value, ')') !== false && strpos($value, ' ') === false) || $value == 'NULL' || (strpos($value, '*') !== false && strpos($value, ' ') === false) || strpos($value, '%') !== false || (strpos($value, '+') !== false && strpos($value, ' ') === false) || (strpos($value, '-') !== false && strpos($value, ' ') === false))
    60.       return $value;
    61.     elseif (is_null($value))
    62.       return 'NULL';
    63.     elseif ($type == 'integer')
    64.       return self::escape((int)$value);
    65.     elseif ($type == 'string')
    66.       return '"'.self::escape((string)$value).'"';
    67.   }
    68.  
    69.   public static function connect($db_host, $db_user, $db_pass, $db_name, $persistent = true)
    70.   {
    71.     if (is_resource(self::$_resource) && get_resource_type(self::$_resource) == 'mysql_link')
    72.     {
    73.       trigger_error('DB::connect(): Resource already exists!', E_USER_WARNING);
    74.       return null;
    75.     }
    76.  
    77.     if ($persistent)
    78.       self::$_resource = mysql_pconnect($db_host, $db_user, $db_pass, $persistent);
    79.     else
    80.       self::$_resource = mysql_connect($db_host, $db_user, $db_pass, $persistent);
    81.     if (self::$_resource === false)
    82.     {
    83.       trigger_error('DB::connect(): Connection failed!', E_USER_WARNING);
    84.       return null;
    85.     }
    86.  
    87.     if (!mysql_select_db($db_name, self::$_resource))
    88.     {
    89.       trigger_error('DB::connect(): Database select failed!', E_USER_WARNING);
    90.       return null;
    91.     }
    92.     self::$_db_name = $db_name;
    93.  
    94.     if (self::query("SET character_set_client='utf8', character_set_results='utf8', collation_connection='utf8_general_ci'"))
    95.       return true;
    96.     else
    97.       return null;
    98.   }
    99.  
    100.   public static function disconnect()
    101.   {
    102.     if (is_resource(self::$_resource) && get_resource_type(self::$_resource) == 'mysql_link')
    103.       mysql_close(self::$_resource);
    104.     self::$_resource = null;
    105.     self::$_db_name = null;
    106.   }
    107.  
    108.   public static function getErrorString()
    109.   {
    110.     return mysql_error(self::$_resource);
    111.   }
    112.  
    113.   public static function getErrorCode()
    114.   {
    115.     return mysql_errno(self::$_resource);
    116.   }
    117.  
    118.   public static function query($query, $buffered = true)
    119.   {
    120.     if (self::$_resource === false)
    121.     {
    122.       trigger_error('DB::query(): Connection does not exists!', E_USER_WARNING);
    123.       return null;
    124.     }
    125.     $buffered = (bool)$buffered;
    126.  
    127.     //var_dump($query);
    128.     if ($buffered)
    129.       $result = mysql_query($query);
    130.     else
    131.       $result = mysql_unbuffered_query($query);
    132.  
    133.     if ($result === false)
    134.     {
    135.       trigger_error('DB::query("'.substr($query, 0, 200).'"): Error given: '.mysql_errno().' - '.mysql_error(), E_USER_WARNING);
    136.       return null;
    137.     }
    138.     else
    139.       return $result;
    140.   }
    141.  
    142.   public static function num_rows($result)
    143.   {
    144.     if (get_resource_type($result) != 'mysql result')
    145.     {
    146.       trigger_error('DB::num_rows(): Input parameter is not mysql result resource!', E_USER_WARNING);
    147.       return null;
    148.     }
    149.     return mysql_num_rows($result);
    150.   }
    151.  
    152.   public static function select($fields, $tbl_name, $where = null, $group_by = null, $order_by = null, $limit = null, $start = null, $options = null)
    153.   {
    154.     $query = 'SELECT ';
    155.  
    156.     if (is_array($options))
    157.       $options = implode(' ', array_intersect($options, array('STRAIGHT_JOIN', 'SQL_SMALL_RESULT', 'SQL_BIG_RESULT', 'SQL_BUFFER_RESULT', 'SQL_CACHE', 'SQL_NO_CACHE', 'SQL_CALC_FOUND_ROWS', 'HIGH_PRIORITY', 'DISTINCT', 'DISTINCTROW', 'ALL')));
    158.     else
    159.       $options = '';
    160.  
    161.     if (is_array($fields))
    162.       $query .= '`'.implode('`, `', $fields).'`';
    163.     else
    164.       $query .= self::_checkValue($fields);
    165.  
    166.     $query .= ' FROM ';
    167.  
    168.     if (is_array($tbl_name))
    169.       $query .= implode(', ', $tbl_name);
    170.     else
    171.       $query .= (string)$tbl_name;
    172.  
    173.     if ($where !== null)
    174.       $query .= ' WHERE '.self::_buildWhere($where);
    175.     if ($group_by !== null)
    176.       $query .= ' GROUP BY '.self::_buildOrderBy($group_by);
    177.     if ($order_by !== null)
    178.       $query .= ' ORDER BY '.self::_buildOrderBy($order_by);
    179.     if ($limit !== null)
    180.     {
    181.       $query .= ' LIMIT ';
    182.       if ($start !== null)
    183.         $query .= self::_checkValue($start, 'integer').', ';
    184.       $query .= self::_checkValue($limit, 'integer');
    185.     }
    186.     return self::query($query);
    187.   }
    188.  
    189.   public static function get($resource, $type = 'assoc')
    190.   {
    191.     if (get_resource_type($resource) != 'mysql result')
    192.     {
    193.       trigger_error('DB::get(): Input parameter is not mysql result resource!', E_USER_WARNING);
    194.       return null;
    195.     }
    196.  
    197.     switch ($type)
    198.     {
    199.       case 'object':
    200.       $function = 'mysql_fetch_object';
    201.       break;
    202.       case 'array':
    203.       $function = 'mysql_fetch_row';
    204.       break;
    205.       default:
    206.       $function = 'mysql_fetch_assoc';
    207.       break;
    208.     }
    209.     return $function($resource);
    210.   }
    211.  
    212.   public static function getAll($resource, $type = 'assoc')
    213.   {
    214.     if (get_resource_type($resource) != 'mysql result')
    215.     {
    216.       trigger_error('DB::getAll(): Input parameter is not mysql result resource!', E_USER_WARNING);
    217.       return null;
    218.     }
    219.  
    220.     $cummulative_array = array();
    221.     while ($row = self::get($resource, $type))
    222.       $cummulative_array[] = $row;
    223.  
    224.     return $cummulative_array;
    225.   }
    226.  
    227.   // Insert data into table
    228.   /* $data format:
    229.       array(
    230.         array('column1', 'column2', 'column3'),
    231.         array('value1_row1', 'value2_row1', 'value3_row1'),
    232.         array('value1_row2', 'value2_row2', 'value3_row2'),
    233.         array('value1_row3', 'value2_row3', 'value3_row3')
    234.       )
    235.       or
    236.       array(
    237.         'column1' => 'value1',
    238.         'column2' => 'value2',
    239.         'column3' => 'value3'
    240.       )
    241.   */
    242.  
    243.   public static function insert($data, $tbl_name, $options = null)
    244.   {
    245.     if (!is_array($data))
    246.     {
    247.       trigger_error('DB::insert(): Input data is not array!', E_USER_WARNING);
    248.       return null;
    249.     }
    250.     $type = null;
    251.     $fields = array();
    252.     $values = array();
    253.     foreach ($data as $column => $value)
    254.     {
    255.       // If is not row or bad value - throw error
    256.       if ((is_array($value) && !is_integer($column)) || (!is_array($value) && is_integer($column)))
    257.       {
    258.         trigger_error('DB::insert(): Wrong data format: array element not row or has bad value!', E_USER_WARNING);
    259.         return null;
    260.       }
    261.       if (is_array($value) && count($value) && $type != 'single')
    262.       {
    263.         if (count($fields) == 0)
    264.         {
    265.           foreach ($value as $field)
    266.             $fields[] = $field;
    267.         }
    268.         else
    269.         {
    270.           $row = array();
    271.           foreach ($value as $column_value)
    272.              $row[] = $column_value;
    273.           $values[] = $row;
    274.         }
    275.         $type = 'multiple';
    276.       }
    277.       elseif ($type != 'multiple')
    278.       {
    279.         if (!isset($values[0]))
    280.           $values[0] = array();
    281.         $fields[] = $column;
    282.         $values[0][$column] = $value;
    283.         $type = 'single';
    284.       }
    285.       else
    286.       {
    287.         trigger_error('DB::insert(): Wrong data format: input array elements are not coordinated!', E_USER_WARNING);
    288.         return null;
    289.       }
    290.     }
    291.     if (is_array($options))
    292.       $options = implode(' ', array_intersect($options, array('LOW_PRIORITY', 'DELAYED', 'IGNORE')));
    293.     else
    294.       $options = '';
    295.     foreach ($fields as &$field)
    296.       $field = '`'.$field.'`';
    297.     foreach ($values as &$row)
    298.     {
    299.       foreach ($row as &$value)
    300.       {
    301.         if (strpos($value, '(') === false && strpos($value, ')') === false && $value != 'NULL')
    302.           $value = '"'.self::escape($value).'"';
    303.       }
    304.       $row = implode(', ', $row);
    305.     }
    306.     $result = self::query(
    307.       'INSERT '.$options.' INTO `'.$tbl_name.'` ('.implode(', ', $fields).') VALUES ('.implode('), (', $values).')'
    308.     );
    309.     if ($result !== null)
    310.       return self::affected_rows();
    311.     else
    312.       return null;
    313.   }
    314.  
    315.   // UPDATE data into table
    316.   /* $data format:
    317.       array(
    318.         'column1' => 'value1',
    319.         'column2' => 'value2',
    320.         'column3' => 'value3'
    321.       )
    322.   */
    323.  
    324.   public static function update($data, $tbl_name, $where = null, $order_by = null, $limit = null, $options = null)
    325.   {
    326.     if (!is_array($data))
    327.     {
    328.       trigger_error('DB::update(): Input data is not array!', E_USER_WARNING);
    329.       return null;
    330.     }
    331.     if ($limit !== null)
    332.     {
    333.       $limit = (int)$limit;
    334.       if ($limit < 1)
    335.       {
    336.         trigger_error('DB::update(): Limit value less than 1: setting to null!', E_USER_WARNING);
    337.         $limit = null;
    338.       }
    339.     }
    340.  
    341.     $values = array();
    342.     foreach ($data as $column => $value)
    343.     {
    344.       // If is row or bad value - throw error
    345.       if (is_array($value) || is_integer($column))
    346.       {
    347.         trigger_error('DB::update(): Wrong data format: array element not row or has bad value!', E_USER_WARNING);
    348.         return null;
    349.       }
    350.       $values[] = '`'.$column.'`='.self::_checkValue($data[$column]);
    351.     }
    352.     if (is_array($options))
    353.       $options = implode(' ', array_intersect($options, array('LOW_PRIORITY', 'IGNORE')));
    354.     else
    355.       $options = '';
    356.     $query = 'UPDATE '.$options.' `'.$tbl_name.'` SET '.implode(', ', $values);
    357.     if ($where !== null)
    358.       $query .= ' WHERE '.self::_buildWhere($where);
    359.     if ($order_by !== null)
    360.       $query .= ' ORDER BY '.self::_buildOrderBy($order_by);
    361.     if ($limit !== null)
    362.       $query .= 'LIMIT '.$limit;
    363.     $result = self::query($query);
    364.     if ($result !== null)
    365.       return self::affected_rows();
    366.     else
    367.       return null;
    368.   }
    369.  
    370.   public static function delete($tbl_name, $where = null)
    371.   {
    372.     if ($where === null)
    373.       return (bool)self::query('TRUNCATE TABLE `'.$tbl_name.'`');
    374.     else
    375.       return (bool)self::query('DELETE FROM `'.$tbl_name.'` WHERE '.self::_buildWhere($where));
    376.   }
    377.  
    378.   public static function affected_rows()
    379.   {
    380.     return mysql_affected_rows();
    381.   }
    382.  
    383.   public static function last_insert_id()
    384.   {
    385.     return mysql_insert_id();
    386.   }
    387.  
    388.   public static function escape($string)
    389.   {
    390.     return mysql_real_escape_string($string);
    391.   }
    392.  
    393.   public static function lock($tbl_name, $type = 'read')
    394.   {
    395.     if ($type != 'read' && $type != 'write')
    396.       $type = 'read';
    397.     $type = strtoupper($type);
    398.     self::query('LOCK TABLES '.$tbl_name.' '.$type);
    399.   }
    400.  
    401.   public static function unlock()
    402.   {
    403.     self::query('UNLOCK TABLES');
    404.   }
    405. }
    406.  
     
  10. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    А зачем оно нужно? О_о
     
  11. Clone

    Clone Guest

    Чтобы не компоновать запрос каждый раз, а тупо вызывать DB::insert($data, 'table_name'); и радоваццо жизни.
     
  12. zorba-buddha

    zorba-buddha Активный пользователь

    С нами с:
    28 мар 2008
    Сообщения:
    42
    Симпатии:
    0
    Адрес:
    Подольск
    Clone, глаза сломал ))))
    с перегрузочкой немного борщнул, но затея интересная ))))
    где-то у меня валялся Студийный класс на parser'е, где ещё по типу базы запрос модифицируется, но не помню где...
     
  13. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Clone, разнести бы это по разным классам... Database и Table Gateway.
     
  14. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Это моё имхо ;)