За последние 24 часа нас посетили 18264 программиста и 1634 робота. Сейчас ищут 1744 программиста ...

Класс для работы с БД. Не пинайте сильно :)

Тема в разделе "Решения, алгоритмы", создана пользователем jenyazarechkin, 17 окт 2010.

  1. jenyazarechkin

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

    С нами с:
    17 окт 2010
    Сообщения:
    6
    Симпатии:
    0
    Адрес:
    169
    Привет, решил попробовать себя немного в php, и начал с класса для работы с бд! Честно скажу идею увидел в doctrine, но doctrine что то уж больно тяжёлая. Выношу на суд, не пинайте сильно только, я не программист как таковой, я проектировщик интерфейсов :)

    P.S.: Буду очень признателен если кто нибудь подскажет как сделать систему оповещения об ошибках :) Класс предназначен только для работы с MySql естественно, да может и таким новичкам как я будет попроще разобраться с этим вопросом на оснавании этого кода. Да ещё, если я что то сделал критически кретински прошу указать :)

    PHP:
    1.  
    2. <?
    3. class _db{
    4.  
    5.     // Метод connect в параметре передаём настройки от базы
    6.     // Пример запроса
    7.     // _db::connect(array('host'=>'localhost','user'=>'root','pass'=>'gashish','name'=>'minicms_jeka');
    8.     public function connect($data){
    9.         mysql_connect($data['host'],$data['user'],$data['pass']);
    10.         mysql_select_db($data['name']);
    11.         mysql_query('SET NAMES utf8');
    12.     }
    13.  
    14.     // Метод close
    15.     // Пример запроса
    16.     // _db::close(); :D
    17.     public function close(){
    18.         mysql_close();
    19.     }
    20.  
    21.     // Метод SelectArray, в первом параметре указывается запрос с маской для переменных %
    22.     // Дальше следуют значения переменных в том порядке в каком указаны маски
    23.     // Ответом является двумерный массив
    24.     // Пример запроса
    25.     // $test = _db::SelectArray('SELECT % FROM %', '*', 'tbl_name');
    26.     public function SelectArray(){
    27.         $data = func_get_args();
    28.         $query = $data[0];
    29.         unset ($data[0]);
    30.         $data = array_values($data);
    31.         foreach($data as $k_1=>$v_1){
    32.             $p_1 = stripos($query, '%');
    33.             $query = substr_replace($query, $v_1, $p_1, 1);
    34.         }
    35.         $q_1 = mysql_query($query);
    36.         $i_1 = 0;
    37.         while($r_1 = mysql_fetch_assoc($q_1)){
    38.             foreach( $r_1 as $k_2=>$v_2 ){
    39.                 $return[$i_1][$k_2]=$v_2;
    40.             }
    41.             $i_1++;
    42.         }
    43.         mysql_free_result($q_1);
    44.         return $return;
    45.     }
    46.  
    47.     // Метод SelectRow, в первом параметре указывается запрос с маской для переменных %
    48.     // Дальше следуют значения переменных в том порядке в каком указаны маски
    49.     // Ответом является одномерный массив
    50.     // Пример запроса
    51.     // $test = _db::SelectRow('SELECT % FROM % WHERE id=%', '*', 'tbl_name', 6);
    52.     public function SelectRow(){
    53.         $data = func_get_args();
    54.         $query = $data[0];
    55.         unset ($data[0]);
    56.         $data = array_values($data);
    57.         foreach($data as $k_1=>$v_1){
    58.             $p_1 = stripos($query, '%');
    59.             $query = substr_replace($query, $v_1, $p_1, 1);
    60.         }
    61.         $q_1 = mysql_query($query);
    62.         $r_1 = mysql_fetch_assoc($q_1);
    63.         foreach( $r_1 as $k_1=>$v_1 ){
    64.             $return[$k_1]=$v_1;
    65.         }
    66.         mysql_free_result($q_1);
    67.         return $return;
    68.     }
    69.  
    70.     // Метод Insert, в первом параметре указывается имя таблицы
    71.     // Дальше следует массив со вставляемой информацией Ключ - Имя столбца Значение - Значение
    72.     // Пример запроса
    73.     // _db::Insert('tbl_name', array('parent'=>'1','level'=>'1','sorted'=>'6','index'=>'9','uri'=>'map','title'=>'Карта сайта'));
    74.     public function Insert($table, $data){
    75.         foreach($data as $k_1=>$v_1){
    76.             $into .= '`'.$k_1.'`,';
    77.         }
    78.         foreach($data as $k_1=>$v_1){
    79.             $values .='"'.$v_1.'",';
    80.         }
    81.         $into = substr($into, 0, strlen($into)-1);
    82.         $values = substr($values, 0, strlen($values)-1);
    83.         $query = 'INSERT INTO '.$table.' ('.$into.') VALUES ('.$values.')';
    84.         mysql_query($query);
    85.     }
    86.  
    87.     // Метод Delete, в первом параметре указывается запрос с маской для переменных %
    88.     // Дальше следуют значения переменных в том порядке в каком указаны маски
    89.     // Пример запроса
    90.     // _db::Delete('DELETE FROM % WHERE id=%', 'tbl_name', 19);
    91.     public function Delete(){
    92.         $data = func_get_args();
    93.         $query = $data[0];
    94.         unset ($data[0]);
    95.         $data = array_values($data);
    96.         foreach($data as $k_1=>$v_1){
    97.             $p_1 = stripos($query, '%');
    98.             $query = substr_replace($query, $v_1, $p_1, 1);
    99.         }
    100.         mysql_query($query);
    101.     }
    102.  
    103.     // Метод Update, в первом параметре указывается запрос с маской для переменных %
    104.     // Дальше следуют значения переменных в том порядке в каком указаны маски
    105.     // Пример запроса
    106.     // _db::Update('UPDATE % SET % WHERE id=%', 'tbl_name',array('id'=>'1','uri'=>'map','title'=>'Карта сайта'), 6);
    107.     public function Update(){
    108.         $data = func_get_args();
    109.         $query = $data[0];
    110.         unset ($data[0]);
    111.         $data = array_values($data);
    112.         foreach($data as $k_1=>$v_1){
    113.             if(is_array($v_1)){
    114.                 foreach($v_1 as $k_2=>$v_2){
    115.                     $temp .= $k_2.'="'.$v_2.'",';
    116.                 }
    117.                 $temp = substr($temp, 0, strlen($temp)-1);
    118.                 $p_1 = stripos($query, '%');
    119.                 $query = substr_replace($query, $temp, $p_1, 1);
    120.             }else{
    121.                 $p_1 = stripos($query, '%');
    122.                 $query = substr_replace($query, $v_1, $p_1, 1);
    123.             }
    124.         }
    125.         mysql_query($query);
    126.     }
    127.  
    128. }
    129. ?>
    130.  
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    jenyazarechkin
    о mysqli слышал? =)
     
  3. jenyazarechkin

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

    С нами с:
    17 окт 2010
    Сообщения:
    6
    Симпатии:
    0
    Адрес:
    169
    igordata
    Слышал немного :) Пойду почитаю :)
     
  4. Mr.M.I.T.

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

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    ещё есть sprintf()
     
  5. Mr.M.I.T.

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

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    а так же implode()
     
  6. Mr.M.I.T.

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

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    а так же array_shift() array_pop()
     
  7. Mr.M.I.T.

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

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    PHP:
    1. foreach( $r_1 as $k_2=>$v_2 ){
    2.                  $return[$i_1][$k_2]=$v_2;
    3.              }
    а так же php умеет присваивать целые массивы
     
  8. jenyazarechkin

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

    С нами с:
    17 окт 2010
    Сообщения:
    6
    Симпатии:
    0
    Адрес:
    169
    Mr.M.I.T.
    Вот за этот совет спасибо :)
     
  9. jenyazarechkin

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

    С нами с:
    17 окт 2010
    Сообщения:
    6
    Симпатии:
    0
    Адрес:
    169
    MySQLi конечно удобен :) Но я это, попратиковаться просто решил, не то что бы я типа вот гениальную весчь изобрёл :) Так обучаюсь чисто :)
     
  10. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    здесь нет никакой идеи из доктрины
     
  11. jenyazarechkin

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

    С нами с:
    17 окт 2010
    Сообщения:
    6
    Симпатии:
    0
    Адрес:
    169
    Koc возможно и нет :) Я имел введу удобность запроса :) Ну или я чёго то не понимаю :D
     
  12. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Кодировку менять в коде?
    старые функции
    В контексте реализации - совершенно ненужный метод (ссылка на соединение не хранится, закроется последнее соединение).
    ну и та же фигня - ресурс соединения в классе не хранится. Использоваться будет последнее созданое, и не факт что это будет соединение, созданое этим классом.
    интересная реализация =)
    такому классу положени эскейпить данные самостоятельно (как это mysqli делает для подготовленных запросов).

    Объектный интерйес mysqli заменяет это класс на 100500%
     
  13. jenyazarechkin

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

    С нами с:
    17 окт 2010
    Сообщения:
    6
    Симпатии:
    0
    Адрес:
    169
    [vs] про MySqlli ты точно сказал :) Я на момент написания про него не знал :D Я ж не программист типа :) Это так самотренировка! Кстати я его (класс) по всем советам данным здесь уже подисправил, кол-кода сократилось достаточно :) Я лошара и не знал к примеру о существовани implode() :D и подобных вещей которые здорово сократили набор этой писаниы :) Сейчас читаю мануал от корки до корки как говорится!