Доброго времени суток. Произвожу подключение к БД объектным способом. Код (Text): $mysqli = new mysqli("localhost", "root", "root" "publications"); Как получить доступ к объекту $mysqli из другого файла? Чтобы иметь возможность произвести обращение к базе
создать ещё один объект в другом файле. Если эти два файла никак не связаны друг с другом(инклюд, область видимости(тогда поможет global));
каждое создание объекта это ведь новое подключение к БД, разве нет? Если так и есть, мне надо получить тот же объект для всех скриптов которые есть в текущем проекте. Присматривался к Singleton, это то что мне надо или есть варианты получше?
"Пхп создан чтобы умирать" принцип работы пхп - отработал , закрылся и завершил все коннекты ( к базам тоже) отсюда вывод - каждый новый файл - новый коннект ( ну исключаем то что подключается через include и аналоги)
в другом файле который ты инклудишь для обработки этого же запроса? или в другом файле который будет вызван когда-нибудь или не будет никогда?..
Получается для каждого нового файла новый коннект к базам? В другом файле который будет вызван когда-нибудь. Дело в том что работает автозагрузка, и не известно какая модель будет загружена. Мне не хочется в каждой модели производить коннект к базе. Хотелось создать файл коннекта к базе, инклуднуть его к главной индексной странице и после получать объект коннекта к базе и использовать его для всех последующих обращений к базе.
заново подключаться. это не значит, что будет 100% подключение заново. =) это ж пхп. Мало ли там как себе драйвер бд работает. Может держать коннекты. Я с выборками из бд по 400+ страниц в секунду вытаскиваю. Че ты морочишься? =))))) Дык все так и делают.
Ну вот поэтому хочется использовать одно подключение) Но вот у меня почему то получить этот файл не получается структура сайта такова: контроллер модель вид. Использовал объектную модель подключения к БД, процедурную, но все так же не догнал как получить объект коннекта к БД.
Чувак в чем затык? =) кем получить? куда получить? почитай про синглтон и статику. может это то что нужно.
мозговой затык похоже в том, что автор путает понятия "файл" и "запрос". как уже сказали, открытие каждой странички будет означать новый жизненный цикл: подключился-прочитал-обработал-вывел-умер. страничка - это запрос (request). а файл это файл ))) если у тебя 20 классов в отдельных файлах используют БД, совсем необязательно создавать новые подключения. тебе надо просто в каждом из них работать с одним и тем же объектом-интерфейсом БД. передавай этот объект в конструкторы или сделай его доступным глобально. объяснить тебе про глобальную доступность?
кажется он имел ввиду вот что : файл 1.php Код (PHP): $mysqli = new mysqli("localhost", "root", "root" "publications"); файл 2.php Код (PHP): include_once ("1.php"); if ($mysqli->connect_error) { die('Ошибка подключения (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error); } т.е. тебе ничто не мешает использовать подключение в другом файле =)
Slavka, это все у меня получается. Видимо я вопрос не так ставлю, что меня все не понимают. И так, как я понимаю работу php: Возьмем некий проект который имеет такую структуру: / /core/controllers/ /core/models/ /core/views/ корне проекта лежит как положено индексная страница: Код (Text): index.php и в /core/controllers/ тоже... и так далее. к индексной странице я делаю иклуд скрипта обращения к БД а в ствою очеред к index.php производится автозагрузка необходимых страниц. Вот как только будет запущен сайт, мы получим объект коннекта к БД. вопрос: Как мне получить этот объект в другом /core/models/index.php Учитывая что /core/models/index.php автоматически загружается и объект подключения к БД должен видется в нем? Добавлено спустя 2 минуты 26 секунд: так же и все инициализированные переменные созданные объекты теряются? если так, то каждое обновление страницы это новый коннект к БД. Я воспринимал сайт как большое приложение, которое запускается, и все инициализированные переменные сохраняются до закрытия страницы.
а зачем хранить коннект ? допустим - мы сохранили коннект на время действия сессии .. допустим теперь представь - 100 пользователей - 100 постоянных коннектов - брр бедный мускель вызывай новый коннект я как то глубоко вчитывался в мускель .. там суть такая ты создал коннект - работаеш с ним .. ок другой файл - опять вызываеш создание коннекта - при этом если предыдуший коннект к тебе жив - тебе вернется ( автоматом) его сид и работать будеш именно с этим .. там помойму даже если 2 раза подряд коннект запустить - то он всеравно будет 1 =) поверь не заморачивайся и просто в каждом индексе делай коннект .. а если используются классы - вешай его на конструктор - пускай сам стартует когда надо.
Ужос. Выдавать не более 1 коннекта в час в одни руки! ТС, с этого надо было начинать. С проектирования бд в которой у вас и вся структура бы хранилась. Это ваши деревянные способы организации сайтов sucks и мастдай. Короче, сделайте себе синглетон и получайте инстансь с любого места если на то пошло. Или передавайте линк из конфига во все модули. Добавлено спустя 12 минут 29 секунд: В смысле в индексе? Речь идет что ли о новом скрипте в который ТС хочет коннект передать? Это невозможно. Каждый вновь запускаемый скрипт должен создавать свой коннект даже если они в соседних фреймах. Коннект можно передать в функцию аргументом, в класс инъекцией, или получить единственную инстансь вызовом метода "статического" класса коннекта. Инклюдам текущий коннект доступен сам по себе. Как правило есть стартовый скрипт - в нем делается коннект и всем инклюдам это по нраву. Инъекция Код (Text): class myClass { function construct($mysqli) { $this->mysqli = $mysqli; } public function method() { $mysqli = $this->mysqli; // юзаете майскли как будто он тут и рос } }