Николай М.
1895 сообщений
#16 лет назад
Только начал изучать PHP, и у меня возникло непонимание такого плана:
<?php
/* Соединяемся, выбираем базу данных */
$link = mysql_connect("mysql_host", "mysql_user", "mysql_password")
or die("Could not connect : " . mysql_error());
print "Connected successfully";
mysql_select_db("my_database") or die("Could not select database");

/* Выполняем SQL-запрос */
$query = "SELECT * FROM my_table";
$result = mysql_query($query) or die("Query failed : " . mysql_error());

/* Выводим результаты в html */
print "<table>n";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
print "t<tr>n";
foreach ($line as $col_value) {
print "tt<td>$col_value</td>n";
}
print "t</tr>n";
}
print "</table>n";

/* Освобождаем память от результата */
mysql_free_result($result);

/* Закрываем соединение */
mysql_close($link);
?>


работает, но суть не в том, проблема такая вот обясните, захожу на такую страничку, делаеться подключение и отключение

есть такая штука как mysql.allow_persistent, вот линка на инфу
я только начал изучать PHP, но я не понимаю зачем постоянно приконекчиваться и отконекчиваться?
как сделать например чтоб всегда било только одно подключение к СУБД, тоесть одновременно работает только один процесс, а все другие стоят в очереди? Как оптимально использовать ресурсы ПК для данного дела, или как юзают сие чудо профи. Меня єто очень интересует.

Єто мне нужно для того чтоб написать свой модуль портфолио, сейчас оно выглядит так:
но оно меня не устраивает, нашёл также халявний модуль для DLE, но тоже не то что надо, одним словом решил писать с нуля, заодно и научусь
Константин Т.
589 сообщений
#16 лет назад

mysql_pconnect; или в случае с PDO работает так:
$dbh = new PDO( 'mysql:host=' . DB_HOST . ';dbname=' . DB_DATABASE, DB_USERNAME, DB_PASSWORD,
array(PDO :: ATTR_PERSISTENT=>true,));

Но это не значит , что будет одно соединение, будет сколько надо. А как сделать чтобы было одно - не знаю. заблокируйте базу, будет одно

Как ни странно, в документации не поленились написать про всё это. содержит и некоторые другие интересные сведения в комментариях.
Николай М.
1895 сообщений
#16 лет назад
Pilat66, если я верно понял то PDO аналог ADO в прикладном программировании, тоесть универсальный "драйвер" для работы с СУБД. Хм... єто хорошо, наверное таким макаром работают с екзелем под винду как с СУБД?

как то єто не рационально, создавать много подключений, как говориться на каждый пук по подключению... вот сами подумайте, СУБД на другом сервере, скажем в другой стране, подключение к нему идет с сайта, время на прохождение всей цепочки подключения весьма затягивается по временным затратам, но... если иметь одно постоянное подключение (например создаться при первой необходимости, и удаляться при каком то тайм ауте), конечно зная про особенность что при длительном простое MySQL сам разрывает соединение, то конечно нужно будет делать его штучно активным. Но есть еще такая штука как синхронные и асинхронные запроси, єто както реализовано в PHP ?

А как можно открывать соединение в одном модуле, а использовать в другом, а в третьем его закрывать?
Николай М.
1895 сообщений
#16 лет назад
Хм... неужели все так запущено, разве больше никто не думал про данную проблему?
Станислав Малкин
1410 сообщений
#16 лет назад
Встречный вопрос: а зачем ставить запросы к базе в очередь и давать только 1 подключение? А если на сайте одновременно 1000 пользователей? Они все будут ждать, пока дойдет до них очередь? Я бы ушел с такого сайта
Вадим Т.
3240 сообщений
#16 лет назад
MMM_Corp, PHP не имеет инструментов для управления пулом соединений. Можно используя pconnect минимизировать количество открытий/закрытий одновременно используемых соединений, но управлять этим не получится.

Проблема в том, что PHP по своей сути не умеет работать с активными долгоживущими пользовательскими объектами в памяти в рамках одного апликейшена. Частные решения, типа pconnect базе mysql extension (а также и ряда других extensions), которые работают только в режиме модуля (mod_php для apache) погоды не делают, так как они малочисленны и узкозаточены, да и делаются не пользователями, а разработчиками этих extensions.

Если если бы Вы например вместо связки PHP + Database использовали Java/J2EE + Database, тогда в Вашем распоряжении было бы все, чтобы управлять соединениями и их использованием в рамках всего апликейшена (см. connection pools).
Константин Т.
589 сообщений
#16 лет назад
Цитата ("MMM_Corp"):
А как можно открывать соединение в одном модуле, а использовать в другом, а в третьем его закрывать?

- там доктора, там помогут.
Не надо от PHP ждать много, это шаблонник.
MySQL, кстати, славится своими быстрыми соединениями - это и его проблема, и достоинство.