За последние 24 часа нас посетили 17733 программиста и 1659 роботов. Сейчас ищут 934 программиста ...

Посоветуйте библиотеку/обёртку для MySQLi

Тема в разделе "PHP для новичков", создана пользователем Sergey_Tsarev, 3 сен 2018.

  1. Sergey_Tsarev

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

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    Всем привет! Посоветуйте какой-нибудь класс для работы с MySQLi. Чтоб был проверенный, надёжный, и понятный :D
     
  2. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    misqli само по себе класс работайнехочу...
     
  3. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    Sergey_Tsarev нравится это.
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    Sergey_Tsarev и _ne_scaju_ нравится это.
  5. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    как по мне, очень тяжело разобраться новичку что к чему, плюс код не документирован, человек знающий только разберется в нем, не знаю как автор стати, может и разберется, я точно нет)
    Но код написан красиво и 95% грамотно, эти 5% оставил потому что есть вероятность что ты будешь переделывать, а в друг увидишь что-то не хорошее)
     
  6. Sergey_Tsarev

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

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    @Valick, не соглашусь. В MySQLi для одного запроса нужно несколько строк кода написать. + запрос составить. Обёртка помогает сделать это практически в одну строчку.
     
  7. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
  8. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    Учел тот вердикт, что мой/твой/чей-либо (обвертка,библиотека,прочее мелкая хрень) говнокод подавно никому не нужен (как не стараясь). Поэтому основного внимания не уделил. Но отнюдь:
    https://github.com/MouseZver/Lerma/blob/master/README.md
    https://github.com/MouseZver/Lerma/wiki/Руководство
    https://github.com/MouseZver/Lerma/wiki/Предопределенные-константы
     
  9. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    а вот мне нужен) думаю не только мне! у тебя обвертка PDO есть?
     
  10. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    Обворачивать обвертку обверткой, не нету.
     
    AlexProg и _ne_scaju_ нравится это.
  11. AlexProg

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

    С нами с:
    13 май 2014
    Сообщения:
    320
    Симпатии:
    7
    Обернув можно быстрее (короче) код писать. Плюс prepare и execute не нужно по 10 раз писать. В общем я ЗА простой не нагруженный класс для работы с PDO. :)
     
  12. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    покажи пример простого класса)
     
    AlexProg нравится это.
  13. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
  14. AlexProg

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

    С нами с:
    13 май 2014
    Сообщения:
    320
    Симпатии:
    7
    держи

    PHP:
    1. class Database{
    2.     public $isConn;
    3.     protected $datab;
    4.  
    5.     public function __construct($username, $password, $host, $dbname, $options = []){
    6.         $this->isConn = TRUE;
    7.         $dsn = 'mysql:dbname=' . $dbname . ';host=' . $host . ';charset=utf8';
    8.         $options = array(
    9.             PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    10.             PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    11.             PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
    12.         );
    13.  
    14.         try {
    15.             $this->datab = new PDO($dsn, $username, $password, $options);
    16.             $this->datab->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    17.         } catch (PDOException $e) {
    18.             throw new Exception($e->getMessage());
    19.  
    20.         }
    21.  
    22.     }
    23.  
    24.     public function Disconnect(){
    25.         $this->datab = NULL;
    26.         $this->isConn = FALSE;
    27.     }
    28.  
    29.  
    30.     // get row
    31.     public function getRow($query, $params = []){
    32.         try {
    33.             #$this->datab->beginTransaction();
    34.            $stmt = $this->datab->prepare($query);
    35.             $stmt->execute($params);
    36.             return $stmt->fetch();
    37.         } catch (PDOException $e) {
    38.             $message = $e->getMessage();
    39.             $error = $e->getTrace();
    40.             # Пишем в лог
    41.            Log::writelog('sql_error', $error, $message);
    42.         }
    43.     }
    44.  
    45.     // get rows
    46.     public function getRows($query, $params = []){
    47.         try {
    48.             $stmt = $this->datab->prepare($query);
    49.             $stmt->execute($params);
    50.             return $stmt->fetchAll();
    51.         } catch (PDOException $e) {
    52.             $message = $e->getMessage();
    53.             $error = $e->getTrace();
    54.             Log::writelog('sql_error', $error, $message);
    55.         }
    56.     }
    57.  
    58.     // insert row
    59.     public function insertRow($query, $params = []){
    60.         try {
    61.             $stmt = $this->datab->prepare($query);
    62.             $stmt->execute($params);
    63.             return TRUE;
    64.         } catch (PDOException $e) {
    65.             $message = $e->getMessage();
    66.             $error = $e->getTrace();
    67.             Log::writelog('sql_error', $error, $message);
    68.         }
    69.     }
    70.  
    71.     // update row
    72.     public function updateRow($query, $params = []){
    73.         try {
    74.             $this->insertRow($query, $params);
    75.             return TRUE;
    76.         } catch (PDOException $e) {
    77.             $message = $e->getMessage();
    78.             $error = $e->getTrace();
    79.             Log::writelog('sql_error', $error, $message);
    80.         }
    81.     }
    82.  
    83.     // delete row
    84.     public function deleteRow($query, $params = []){
    85.         $this->insertRow($query, $params);
    86.     }
    87.     ##########
    88.  
    89.  
    90.     public function getColumn($query, $params = []){
    91.         try {
    92.             $stmt = $this->datab->prepare($query);
    93.             $stmt->execute($params);
    94.             return $stmt->fetchColumn();
    95.         } catch (PDOException $e) {
    96.             $message = $e->getMessage();
    97.             $error = $e->getTrace();
    98.             Log::writelog('sql_error', $error, $message);
    99.         }
    100.     }
    101.  
    102.  
    103.     public function rowCount($query, $params = []){
    104.         try {
    105.             $stmt = $this->datab->prepare($query);
    106.             $stmt->execute($params);
    107.             return $stmt->rowCount();
    108.         } catch (PDOException $e) {
    109.             $message = $e->getMessage();
    110.             $error = $e->getTrace();
    111.             Log::writelog('sql_error', $error, $message);
    112.         }
    113.     }
    114.  
    115.     public function FetchRow($query, $params = []){
    116.         try {
    117.             $stmt = $this->datab->prepare($query);
    118.             $stmt->execute($params);
    119.             return $stmt->FetchRow();
    120.         } catch (PDOException $e) {
    121.             $message = $e->getMessage();
    122.             $error = $e->getTrace();
    123.             Log::writelog('sql_error', $error, $message);
    124.         }
    125.     }
    126.  
    127.  
    128.     public function getlastInsertId(){
    129.         try {
    130.             return $this->datab->lastInsertId();
    131.         } catch (PDOException $e) {
    132.             $message = $e->getMessage();
    133.             $error = $e->getTrace();
    134.             Log::writelog('sql_error', $error, $message);
    135.         }
    136.     }
    137.  
    138.  
    139. }

    PHP:
    1. $db->getColumn("SELECT COUNT(*) FROM `users` WHERE `user` = ?" , [$first_name]);
    PHP:
    1. $db->getRow("SELECT `user` FROM `users` WHERE `id` = ?" , [$id]);
    getRows - для циклов (массив вернет, т.е. не одну запись)

    Можно вот так, тогда $query можно еще где то использовать, код сокращается.
    PHP:
    1. $query = "INSERT INTO `state` (user_id, user, state) VALUES (?,?,?)";
    2. $db->insertRow($query, [$user_id, $user, $state]);
    deleteRow понятно

    PHP:
    1. $db->updateRow("UPDATE `users_data` SET `skype` = ? WHERE `id` = ? AND `user_login` = ?", [$skype, $id, $uname]);
     
    _ne_scaju_ нравится это.
  15. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    этот я уже видел)
    по типу этого класса у меня уже есть, только у меня на много меньше методов.
    вот присмотрись внимательно на свои методы и скажи чем они отличаются? мне кажется отличаются только возвращаемым результатом fetch fetchall fetchcolumn rowcount, можно вроде проще сделать, я совет не могу дать, программисты со стажем могут дать совет.
    вопрос не однозначный, где-то читал что использовать try catch не есть хорошо, не слыхал о таком?
     
    AlexProg нравится это.
  16. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Когда ты такое где-то читаешь, то стремись запомнить, почему, и приводить с этим аргументом. Сейчас try/catch - рекомендованный способ реакции на ошибки.
     
    _ne_scaju_ и AlexProg нравится это.
  17. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    спасибо, я же уточнил где-то читал( и это может около 2-х лет назад :D во запомнил)
     
  18. AlexProg

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

    С нами с:
    13 май 2014
    Сообщения:
    320
    Симпатии:
    7
    Да, для удобства. Мне так удобнее.
     
    _ne_scaju_ нравится это.
  19. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    обожаю удобства) класс вроде не плохой, например у зверя из форума класс mysqli навороченный)
    у меня для обновления и удаления данных используется один метод, хотя можно его разделить на 2, но зачем делать одинаковые 2 метода, только названия будут разные), только чтобы удобно было и все, вот я например и так в запросе видеть буду UPDATE или DELETE и пойму что обращаясь к методу допустим $db->del_upd() я буду понимать что запрос должен выполнить).
    Я тебе не советую чтобы ты сократил код, если удобно пожалуйста, мне понравился твой, класс, добавлю я себе еще 2 метода, fetchcolumn и rowCount) спасибо дружище.
     
    AlexProg нравится это.
  20. Alex654

    Alex654 Новичок

    С нами с:
    8 сен 2018
    Сообщения:
    18
    Симпатии:
    1
    Сохранил к себе. Скажите, а почему у Вас в функции updateRow отсутствует prepare, тогда как во всех остальных местах он есть? В чём здесь задумка?
     
  21. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    Есть prepare. Он наследует функционал insertRow
     
    AlexProg и _ne_scaju_ нравится это.
  22. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    точняк)
     
  23. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    вот только лишняя ловля исключений
     
  24. Alex654

    Alex654 Новичок

    С нами с:
    8 сен 2018
    Сообщения:
    18
    Симпатии:
    1
    А, прошу прощения, невнимательно совсем читал) И правда.
     
  25. AlexProg

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

    С нами с:
    13 май 2014
    Сообщения:
    320
    Симпатии:
    7
    Почему?