За последние 24 часа нас посетил 22631 программист и 1143 робота. Сейчас ищут 783 программиста ...

Хранить DB Link в сессии - плохая идея?

Тема в разделе "PHP для новичков", создана пользователем Nerfed, 14 авг 2017.

  1. Nerfed

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

    С нами с:
    21 июл 2017
    Сообщения:
    186
    Симпатии:
    12
    Сабж. Хочу закэшировать линк базы данных так. Это может хоть как-то нарушить безопасность сайта? Или в линк ничего страшного подставить нельзя?

    PHP:
    1. function connect_db() {
    2.    if ($_SESSION['mfdb']) {
    3.       return $_SESSION['mfdb'];
    4.    }
    5.    include($this->site_dir.'wp-config.php');
    6.    $db = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
    7.    if (mysqli_connect_errno()) {
    8.       $this->error_tpl('Не удалось подключиться к базе данных', mysqli_connect_error());
    9.       die();
    10.    }
    11.    if (!mysqli_set_charset($db, "utf8")) {
    12.       $this->error_tpl('Ошибка базы данных', mysqli_error($db));
    13.       die();
    14.    }
    15.    $_SESSION['mfdb'] = $db;
    16.    return $db;
    17. }
     
  2. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.554
    Симпатии:
    1.754
    Бесполезняк. Соединение разрывается при завершении работы скрипта.
    Блин, что за манера дописывать что-то к вордпрессу не через API вордпресса.... Не дай Бог такое на сопровождение попадётся...
     
    artoodetoo нравится это.
  3. Nerfed

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

    С нами с:
    21 июл 2017
    Сообщения:
    186
    Симпатии:
    12
    @mkramer Болезнь новичков наверно.) У меня просто есть класс, в конструкторе которого идёт подключение к БД и он может вызываться несколько раз по ходу выполнения скрипта. Надо либо закэшировать как-то линк своего подключения, либо достать вордпрессовский - пока не могу нагуглить как.
     
  4. Nerfed

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

    С нами с:
    21 июл 2017
    Сообщения:
    186
    Симпатии:
    12
    Короче по-моему проще сделать через глобальную переменную.
    PHP:
    1. $db = 0;
    2. class Test {
    3.     function testing() {
    4.         global $db;
    5.         if ($db) {
    6.             echo 'defined!';
    7.         }
    8.         $db = 1;
    9.     }
    10. }
    11.  
    12. $class = new Test();
    13. $class->testing();
    14. $class = new Test();
    15. $class->testing();
     
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
    и нафиг тебе класс нужен ? мало того что использование класса "ваще **здатое", дык еще и тупой глобал присунул, как хрен через пупок.
     
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Есть ненулевая вероятность, что Вордпресс имеет на борту API для работы с БД и тебе нет нужды писать свое рядышком. Серьезно. Почитай документацию.
     
  7. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.554
    Симпатии:
    1.754
    Интересно, как ты гуглишь...
    PHP:
    1. global $wpdb;
    Там уже есть все методы, не надо выискивать, где сам mysql/mysqli у wordpress-а. Потому что если завтра WordPress решит перейти на pdo, то твой скрипт упадёт. А если всё через $wpdb сделаешь, будет работать
    --- Добавлено ---
    https://wp-kama.ru/function/wpdb
     
  8. Nerfed

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

    С нами с:
    21 июл 2017
    Сообщения:
    186
    Симпатии:
    12
    Ну так, мне не методы надо, потому что вертел я Wordpress с его методами. Зачем учить PHP, чтобы потом ещё учить синтаксис Wordpress? Проще в своём конструкторе определить то что тебе нужно и писать привычный код, без вордпрессовских костылей. Ну, это лично моё мнение.
     
  9. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Вот как этот текст видят опытные разработчики:
    "Проще свои костыли натыкать, чем разбираться в отлаженном API для работы с БД у продукта, в который было человекочасов вложено больше, чем я живу на свете".

    О каком синтаксисе Wordpress идет речь? Вот тебе пример:
    PHP:
    1. $data = $wpdb->get_results( "SELECT * FROM table" );
    На входе Mysql-запрос как аргумент функции, на выходе данные. Одна строчка. Лаконичнее не придумать. И так выглядят 95% подобных API. И твой бы так выглядел. Но ты даже не посмотрел, о чем речь, заочно сделав все выводы, основываясь не на чём. Зря.

    Не, похвально конечно, что ты свои костыли пишешь для работы с БД. Это очень полезно, когда с нуля что-то делаешь. Но когда работаешь с движком/фреймворком, у которого это уже реализовано, причем, скорее всего, лучше, чем ты бы сам сделал, смысл дублировать уже готовые методы? Смысл создавать себе проблемы, чтобы потом самому их решать, когда они уже решены заранее?
     
  10. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.554
    Симпатии:
    1.754
    Тогда надо писать свой код полностью. Поскольку иначе игнор API вордпресса неизбежно приведёт к конфликтам. У вордпресса не костыль, а весьма неплохой класс работы с БД
     
  11. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    подключение к бд обычно "кешируется" внутри php-расширения/плагина/библиотеки для работы с этой бд. Т.е. оно не закрывается сразу и переиспользуется.
     
  12. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    Nerfed нравится это.
  13. Nerfed

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

    С нами с:
    21 июл 2017
    Сообщения:
    186
    Симпатии:
    12
    Вот это полезная информация. Но звучит как ещё больший геморрой, чем то решение с глобальными переменными, что я выложил. Потому что:
    Объясняю как это происходит в мире обычных людей, а не в мире программистов, где всё идеально. Тебе нужен сайт, но у тебя нет денег. Ты начинаешь говнокодить что-то сам, а через пару лет, когда уже сайт готов и всё работает, то переделывать что-то по-человечески становится ппц лень. Проще сделать небольшой костыль на свой костыль и забыть про это.
     
  14. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    ни разу такого не было. возможно этим занимется драйвер.
    --- Добавлено ---
    ну да, ну да
     
  15. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Ды все уже сделано за тебя. Я ж выше привел пример. Если у тебя нет денег и времени, то зачем говнокодить то, что уже написано за тебя, учитывая, что ты используешь движок, в котором это написано? Зачем усложнять? Это все равно что в машину садиться со своим ремнем безопасности, прибивая его к салону гвоздями. Потому что родной слишком изучать долго - пряжку в крепление воткнуть это ж огого. Проще гвоздей побольше взять.
     
    Nerfed и mkramer нравится это.
  16. Nerfed

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

    С нами с:
    21 июл 2017
    Сообщения:
    186
    Симпатии:
    12
    Ну, вот так самоучки начинают кодить.) Руль держать ты научился кое как, коробку переключать научился, педали нажимать тоже. На ремень сил не хватило. А потом стало пофиг, привык к гвоздям.
     
  17. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Нет, не так. Оправдывать быдлокодерство не надо. За всех говорить не надо. Прятаться за выдуманные чужие спины не надо.
    Ты разве не понимаешь, что тебе подсказывают, не чтобы поспорить, а чтобы ты стал лучше? Скажи честно, что не так в API работы с бд, которое я выше показал? Чем оно тебя не устраивает? Что в нем не понятно? Что сложно?

    Ты скажи, мы объясним.
     
  18. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Две ошибки с самого начала: соединение не надо кешировать и сессию ты зря считаешь кешем. А так-то, экспериментироть надо. Только с внятно обозначенной целью.