[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Прервать выполнение запроса MySQL из PHP
elliot
Добрый день!

Есть система генерации отчетов. Пользователь выбирает параметры отчета (фильтры и прочее) и отправляет форму с помощью Ajax.
Есть кнопка "Отменить", при нажатии на которую происходит обрыв соединения с сервером (Jquery.abort()).

При нажатии на нее, скрипт завершается и на сервере вызывается shutdownHandler.

В этой функции я проверяю, если соединение было прервано пользователем, то закрываю все открытые к разным БД соединения:

function scriptShutdownHandler()
{
if (connection_aborted()) {
Fw_Db_Factory::closeConnections(); // здесь для каждого соединения вызывается mysql_close.
}
}



Во время построение отчета набираю в консоли mysql:
SHOW PROCESSLIST;

+-----+-----------+-----------+---------------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+-----------+-----------+---------------+---------+------+-------+------------------+
| 53 | root | localhost | NULL | Query | 0 | NULL | SHOW PROCESSLIST |
| 177 | reporting | localhost | settings | Sleep | 5 | | NULL |
| 178 | reporting | localhost | datawarehouse | Sleep | 3 | | NULL |
| 179 | reporting | localhost | datawarehouse | Sleep | 3 | | NULL |
+-----+-----------+-----------+---------------+---------+------+-------+------------------+

Вижу, что открыты соединения с этого скрипта к БД, еще секунд 5 (время генерации этого отчета).

Т.е. похоже на то, что закрытие соединений из PHP не работает.


Хотелось бы посоветоваться с более опытными в этом вопросе людьми, как лучше завершить выполнение запроса MySQL?





Спустя 12 минут, 26 секунд (22.12.2010 - 16:10) Basili4 написал(а):
mysql_close. помоему это закрывает соединение с сервером а не запрос mysql_free_result осовбождает ресурс и возможно будет более логичным использовать его.

Спустя 6 минут, 53 секунды (22.12.2010 - 16:17) elliot написал(а):
Цитата (Basili4 @ 22.12.2010 - 13:10)
mysql_close. помоему это закрывает соединение с сервером а не запрос mysql_free_result осовбождает ресурс и возможно будет более логичным использовать его.

Да, mysql_close закрывает соединение с сервером MySQL.
mysql_free_result - параметр функции - это резултаты выполнения mysql_query. В моем случае запрос отправлен на сервер MySQL, но результаты еще не вернулись.
Эта функция очищает память, выделенную под вернувшиеся результаты SQL запроса.

Спустя 1 час, 40 минут, 30 секунд (22.12.2010 - 17:57) Basili4 написал(а):
elliot
не перервешь ни как пых только посылает запросы и ждет результаты ты можешь что хочешь делать обработку после отправки не прервать.

Спустя 2 часа, 31 минута, 26 секунд (22.12.2010 - 20:29) elliot написал(а):
Можно с помощью mysql_thread_id() получить id потока и затем убить его через kill, но это слишком грубо (
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.