За последние 24 часа нас посетили 36220 программистов и 1640 роботов. Сейчас ищут 974 программиста ...

Подключение к БД

Тема в разделе "PHP и базы данных", создана пользователем mahmuzar, 21 окт 2013.

  1. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Доброго времени суток.
    Произвожу подключение к БД объектным способом.
    Код (Text):
    1. $mysqli = new mysqli("localhost", "root", "root" "publications");
    Как получить доступ к объекту $mysqli из другого файла?
    Чтобы иметь возможность произвести обращение к базе
     
  2. zipferrr

    zipferrr Новичок

    С нами с:
    21 окт 2013
    Сообщения:
    6
    Симпатии:
    0
    создать ещё один объект в другом файле. Если эти два файла никак не связаны друг с другом(инклюд, область видимости(тогда поможет global));
     
  3. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    каждое создание объекта это ведь новое подключение к БД, разве нет?
    Если так и есть, мне надо получить тот же объект для всех скриптов которые есть в текущем проекте.
    Присматривался к Singleton, это то что мне надо или есть варианты получше?
     
  4. Slavka

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

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    "Пхп создан чтобы умирать"
    принцип работы пхп - отработал , закрылся и завершил все коннекты ( к базам тоже)
    отсюда вывод - каждый новый файл - новый коннект ( ну исключаем то что подключается через include и аналоги)
     
  5. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    в другом файле который ты инклудишь для обработки этого же запроса?
    или в другом файле который будет вызван когда-нибудь или не будет никогда?..
     
  6. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Получается для каждого нового файла новый коннект к базам?
    В другом файле который будет вызван когда-нибудь.
    Дело в том что работает автозагрузка, и не известно какая модель будет загружена. Мне не хочется в каждой модели производить коннект к базе. Хотелось создать файл коннекта к базе, инклуднуть его к главной индексной странице и после получать объект коннекта к базе и использовать его для всех последующих обращений к базе.
     
  7. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    заново подключаться. это не значит, что будет 100% подключение заново. =) это ж пхп. Мало ли там как себе драйвер бд работает. Может держать коннекты.

    Я с выборками из бд по 400+ страниц в секунду вытаскиваю. Че ты морочишься? =)))))

    Дык все так и делают.
     
  8. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Ну вот поэтому хочется использовать одно подключение)
    Но вот у меня почему то получить этот файл не получается
    структура сайта такова: контроллер модель вид.
    Использовал объектную модель подключения к БД, процедурную, но все так же не догнал как получить объект коннекта к БД.
     
  9. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Чувак

    в чем затык? =)

    кем получить? куда получить? почитай про синглтон и статику. может это то что нужно.
     
  10. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Спасибо, почитаю.
     
  11. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    мозговой затык похоже в том, что автор путает понятия "файл" и "запрос".

    как уже сказали, открытие каждой странички будет означать новый жизненный цикл: подключился-прочитал-обработал-вывел-умер. страничка - это запрос (request).

    а файл это файл ))) если у тебя 20 классов в отдельных файлах используют БД, совсем необязательно создавать новые подключения. тебе надо просто в каждом из них работать с одним и тем же объектом-интерфейсом БД. передавай этот объект в конструкторы или сделай его доступным глобально.

    объяснить тебе про глобальную доступность?
     
  12. Slavka

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

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    кажется он имел ввиду вот что :
    файл 1.php
    Код (PHP):
    1. $mysqli = new mysqli("localhost", "root", "root" "publications");
    файл 2.php
    Код (PHP):
    1. include_once ("1.php");
    2. if ($mysqli->connect_error) {
    3.     die('Ошибка подключения (' . $mysqli->connect_errno . ') '
    4.             . $mysqli->connect_error);
    5. }
    т.е. тебе ничто не мешает использовать подключение в другом файле =)
     
  13. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    для душевного спокойствия и чтобы не учить сразу много всего:
    include_once и require_once
     
  14. Slavka

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

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    исправился =)
     
  15. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Slavka, это все у меня получается.
    Видимо я вопрос не так ставлю, что меня все не понимают.
    И так, как я понимаю работу php:
    Возьмем некий проект который имеет такую структуру:
    /
    /core/controllers/
    /core/models/
    /core/views/

    корне проекта лежит как положено индексная страница:
    Код (Text):
    1. index.php
    и в /core/controllers/ тоже... и так далее.
    к индексной странице я делаю иклуд скрипта обращения к БД а в ствою очеред к index.php производится автозагрузка необходимых страниц.
    Вот как только будет запущен сайт, мы получим объект коннекта к БД.
    вопрос: Как мне получить этот объект в другом /core/models/index.php
    Учитывая что /core/models/index.php автоматически загружается и объект подключения к БД должен видется в нем?

    Добавлено спустя 2 минуты 26 секунд:
    так же и все инициализированные переменные созданные объекты теряются? если так, то каждое обновление страницы это новый коннект к БД.
    Я воспринимал сайт как большое приложение, которое запускается, и все инициализированные переменные сохраняются до закрытия страницы.
     
  16. Slavka

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

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    а зачем хранить коннект ? допустим - мы сохранили коннект на время действия сессии .. допустим

    теперь представь - 100 пользователей - 100 постоянных коннектов - брр бедный мускель
    вызывай новый коннект
    я как то глубоко вчитывался в мускель .. там суть такая
    ты создал коннект - работаеш с ним .. ок
    другой файл - опять вызываеш создание коннекта - при этом если предыдуший коннект к тебе жив - тебе вернется ( автоматом) его сид и работать будеш именно с этим ..

    там помойму даже если 2 раза подряд коннект запустить - то он всеравно будет 1 =)

    поверь не заморачивайся и просто в каждом индексе делай коннект .. а если используются классы - вешай его на конструктор - пускай сам стартует когда надо.
     
  17. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Slavka, спасибо.

    Добавлено спустя 30 секунд:
    Попробую так и сделать.
     
  18. deblogger

    deblogger Новичок

    С нами с:
    11 июл 2013
    Сообщения:
    200
    Симпатии:
    0
    Ужос. Выдавать не более 1 коннекта в час в одни руки!

    ТС, с этого надо было начинать. С проектирования бд в которой у вас и вся структура бы хранилась. Это ваши деревянные способы организации сайтов sucks и мастдай.

    Короче, сделайте себе синглетон и получайте инстансь с любого места если на то пошло. Или передавайте линк из конфига во все модули.

    Добавлено спустя 12 минут 29 секунд:
    В смысле в индексе? Речь идет что ли о новом скрипте в который ТС хочет коннект передать? Это невозможно. Каждый вновь запускаемый скрипт должен создавать свой коннект даже если они в соседних фреймах.

    Коннект можно передать в функцию аргументом, в класс инъекцией, или получить единственную инстансь вызовом метода "статического" класса коннекта. Инклюдам текущий коннект доступен сам по себе. Как правило есть стартовый скрипт - в нем делается коннект и всем инклюдам это по нраву.

    Инъекция
    Код (Text):
    1.  
    2. class myClass {
    3.  
    4. function construct($mysqli) {
    5.    $this->mysqli = $mysqli;
    6. }
    7.  
    8. public function method() {
    9.    $mysqli = $this->mysqli;
    10.  // юзаете майскли как будто он тут и рос
    11. }
    12.  
    13. }