За последние 24 часа нас посетили 31816 программистов и 1755 роботов. Сейчас ищут 965 программистов ...

Как избежать постоянного переподключения к базе данных? И где это хранить?

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

  1. rugleb

    rugleb Новичок

    С нами с:
    27 ноя 2016
    Сообщения:
    25
    Симпатии:
    0
    Обычно я как делал: в каждом скрипте (файле) модели подключал класс базы данных, создавал экземпляр класса и тем самым делал подключение к бд, потом брал оттуда то, что надо. После того, как скрипт отрабатывает, соединение само собой умирает, как и объект. Затем где-то есть header на другой файл какой-нибудь и все заново по кругу. Получается, что идёт постоянное переподключение к базе данных, хорошо ли это?
    Вопрос: как грамотно организовать подключение, может быть в рамках одного пользователя: одно подключение при входе, один реконнект при выходе? Или делать одно подключение в каждой модели (на каждой странице сайта)?
    Заранее спасибо
     
  2. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    В вас не создается новое соединеие если оно уже есть пока идет отработка одного запроса клиента. В чем проблема?
    Проблема в непонимании того как это работает поэтому выведите дебагером все запросы включая подключение и будет понятно как это работает.

    Описанных вами сценариев недостаточно для того, чтобы утверждать что вам необходимо постоянное соединение с субд. Оптимизировать что то имеет смысл тогда когда у вас есть проблема материализованная в виде метрик эту проблему выявляющих. Оптимизация ради оптимизации лишена смысла
     
  3. rugleb

    rugleb Новичок

    С нами с:
    27 ноя 2016
    Сообщения:
    25
    Симпатии:
    0
    Это я понимаю. Я говорю о том, как и где лучше и целесообразно ли хранить долгое (мб постоянное) соединение с бд
     
  4. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @rugleb
    Мнение начинающего, а именно:
    1. В файле config.php ты делаешь конфигурационные данные для работы с БД, user, pass, bdname, host
    2. В другом файле bd.php ты делаешь соединение с БД и при этом указываешь конфигурационные данные require('config.php);
    3. Ты сделал один раз подключение к БД и пере подключаться не нужно будет как сказал @Zuldek ну и я конечно)
    4. Далее для работы с БД ты должен будешь всего указать один файл bd.php в каждом файле где нужна работа с БД
    5. Если в файле в любом нету работы с БД ты не должен указывать туда файл bd.php так как работать в том файле с базой не надо
    6. Вот в принципе и все, что я смог рассказать
    7. Повторяюсь это мнение начинающего.
    Спасибо за внимание.
     
  5. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Вы имеете ввиду такое подключение, которое будет для всех входящих запросов на скрипт ? Типа какую страничку ни открой, а подключение будет то, что было при первом посещении к примеру. Такого не будет.
     
  6. valentinnew

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

    С нами с:
    30 янв 2011
    Сообщения:
    161
    Симпатии:
    36
    <придирки> не bd.php, а db.php (не bazaDannih, а dataBase) </придирки>
    db.php подключать requie_once для того, чтобы не париться о том, что файл уже подключен.
    И в db.php реализовать класс - синглтон, чтобы всё таки было одно соединение в бд на один запрос.
    А так, да, нельзя создавать одно соединение на всю сессию пользователя. Это очень неэффективно.
     
  7. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @valentinnew
    Если ты это мне ответил, кому как нравится тот и называет файлы db.php или bd.php смысл один и тот же)
    И еще не requie_once а require_once у тебя ошибочка.
    С его @Abyss аргументами я согласен.
     
  8. valentinnew

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

    С нами с:
    30 янв 2011
    Сообщения:
    161
    Симпатии:
    36
    если ты пишешь код для себя и читать его будешь только ты, то никто тебе не будет указывать как писать. Но если работаешь в команде, то никто не одобрит такой подход. Программу пишут в первую очередь для программиста, а не для машины. Но это, судя по моему предыдущему опыту здесь - холиварный вопрос.
    db.php или bd.php - принципиальный момент
    requie_once - простая опечатка.
     
  9. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @valentinnew
    Не буду спорить с опытным программистом, так как я начинающий. Я вообще имею право на точку своего мнения.
     
  10. valentinnew

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

    С нами с:
    30 янв 2011
    Сообщения:
    161
    Симпатии:
    36
    Все имют право на свою точку зрения. И спорить надо, но аргументированно и объективно, а не основываясь на своих, сугубо личных предпочтениях.
     
  11. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
  12. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    1) Объявляем статичный класс для работы с БД.
    2) Пишем в нем методы, какие нужны. Учитываем, чтоб подключение к БД делалось только непосредственно при запросе, а не заранее. Там же храним коннект. Им же возвращаем результаты.
    3) Цепляем этот класс к точке входа. Один-единственный раз.
    4) ....
    5) PROFIT111111!!
     
  13. rugleb

    rugleb Новичок

    С нами с:
    27 ноя 2016
    Сообщения:
    25
    Симпатии:
    0
    Хоть кто-то меня понял. Спасибо!)
    --- Добавлено ---
    Благодарю