Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> подкл. к БД в многопользовательских запросах 
:(
    Опции темы
Luchi
Дата 31.10.2013, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 21.8.2012

Репутация: нет
Всего: нет



Может кто объяснить! БД MySQL в ней 2 таблицы.
На сайте в БД в 1 таб. хранятся данные о регистрации пользователей, во 2-й инфа от пользователей. Классы пока не пишу. Пробую накидать скелет всего по простому, т.к. окончательного варианта пока нет. Сделал ф-ю для подключения к БД, ф-и для работы с БД и ф-ю для отключения и очистки переменных. Ф-и сделал, чтобы не писать данные для подключения на разных скриптах сайта, т.к. страниц на сайте больше 10-ти.
Вопросы в следующем:
1. Нужно ли открыто указывать в ф-и данные для подключения к БД или это делается иначе?
2. К примеру на одной из страниц пользователь запустил скрипт, идет подключение к БД, проверка что пользователь зарегистрирован, получение и вывод данных по его запросу. Для него формируется страница, от БД он еще не отключился. На этом этапе другой пользователь открывает другую страницу, делает запрос и для него все идет по тому же сценарию. Т.к. сервера сейчас стоят многоядерные + параллельно может идти несколько процессов, поэтому пока выполнится один скрипт запустится уже другой. В итоге запросы либо могут перепутаться, а вероятнее всего просто возникнет ошибка, когда с БД будет работать несколько пользователей. В mysql_query дескрипторы не указываю. Достаточно для каждого нового запроса подключаться к БД и получать дескриптор, чтобы не было ошибок между разными подключениями к БД?
3. Нужно ли для каждого пользователя создавать новое подключение или есть способ отправлять запросы на одном созданном подключении для разных пользователей?
4. Нужно ли тогда каждый раз закрывать подключение или можно один раз получить дескриптор и отправлять запросы используя его?
Вообщем хотелось бы понять, как грамотно организовать этот момент.
PM MAIL   Вверх
Fortop
Дата 2.11.2013, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 4
Всего: 42



Цитата(Luchi @  31.10.2013,  17:03 Найти цитируемый пост)
1. Нужно ли открыто указывать в ф-и данные для подключения к БД или это делается иначе?

Обычно это выносится в конфигурационные файлы для легкости настраивания.

Цитата(Luchi @  31.10.2013,  17:03 Найти цитируемый пост)
 В итоге запросы либо могут перепутаться

Не перепутаются.
Если будете использовать транзакции, то еще и одними и теми же записями сможете работать в рамках разных подключений без опаски.

Цитата(Luchi @  31.10.2013,  17:03 Найти цитируемый пост)
а вероятнее всего просто возникнет ошибка, когда с БД будет работать несколько пользователей.

Не возникнет. Большинство БД рассчитаны на многопользовательскую работу. Опять же - используйте транзакции, когда это нужно.

Цитата(Luchi @  31.10.2013,  17:03 Найти цитируемый пост)
3. Нужно ли для каждого пользователя создавать новое подключение или есть способ отправлять запросы на одном созданном подключении для разных пользователей?

Есть способ, зависящий от языка на котором пишете и БД. Называется пул соединений. Для общего ознакомления http://habrahabr.ru/post/194142/

Цитата(Luchi @  31.10.2013,  17:03 Найти цитируемый пост)
 Нужно ли тогда каждый раз закрывать подключение или можно один раз получить дескриптор и отправлять запросы используя его?

Не нужно. Можно.



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Luchi
Дата 4.11.2013, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 21.8.2012

Репутация: нет
Всего: нет



Спасибо Fortop за ответ, немного подправил свой код.
Пишу на PHP, версия на хосте 5.3, версия MySQL 5.1.

Для использования транзакции нужны типы таблиц InnoDB или BDB. MySQL, который стоит на хосте этот тип таблиц не поддерживает. Поэтому вопрос 2 актуален.

По поводу использования дескриптора, в мануале, закрывать соединение не обязательно, так как его, при завершении скрипта, php закроет автоматом, закрывать вручную просто правило хорошего кода. Но возникает вопрос, если я буду использовать одно соединение для всех, то, 1-й скрипт пойдет поэтому подключению, пойдет 2-й. 1-й завершится и автоматом завершит соединение, а 2-й еще будет выполняться и здесь возникнет ошибка?

Это сообщение отредактировал(а) Luchi - 4.11.2013, 20:24
PM MAIL   Вверх
baldina
Дата 4.11.2013, 22:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 1
Всего: 101



Luchi, при работе с одной таблицей ничего не перепутается даже без транзакций. за это отвечает субд.

транзакции кстати не столько на многопользовательский доступ ориентированы, сколько на согласованность операций над данными вообще. многопользовательский аспект тут скорее следствие и приятный бонус.
но если речь идет только о выборке, транзакции не нужны.
если производится изменение лишь одной таблицы, транзакции не нужны.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0672 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.