|
PDO не разрывает соединение с MySQL
|
|||
---|---|---|---|
#18+
Добрый день! Операционная система Windows 7, сервер Apache/2.2.22 (Win32) PHP/5.4.40, MySQL 5.6.26. Для подключения к базе данных использую строку: Код: php 1. 2.
Нормально работает, принимает-отправляет запросы к MySQL. Но при перезагрузке страницы в браузере подключение остается постоянным(. Я это заметил, когда решил поменять параметры подключения к базе данных в $strDNS. Перепробовал все рекомендации из интернет: 1. При завершении скрипта страницы обнулил $objDB = null и все объекты, которые участвовали в запросах PDO. 2. Даже попробовал прописать опцию, отменяющую постоянное соединение (хотя она и так по-умолчанию отключена): Код: php 1.
Что ещё можно сделать для разрыва соединения? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2017, 08:06 |
|
PDO не разрывает соединение с MySQL
|
|||
---|---|---|---|
#18+
вы уверены в том что информация берется не из того или иного кеша? (браузера, сервера, ваших скриптов...), а из скрипта/базы? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2017, 08:46 |
|
PDO не разрывает соединение с MySQL
|
|||
---|---|---|---|
#18+
sxq, 1. Файл PHP не кэшируется - проверил вставкой сообщений echo() или exit(). 2. Файл JS, который вызывает PHP не кэшируется, проверил так же вставкой alert(). 3. В базе MySQL нет никаких активных соединений в промежутках между перезапусками страницы в браузере. 4. В диспетчере задач Windows не видно каких-то много раз повторяющихся процессов, правда httpd почему-то 2 раза запущен, хотя сервер установлен один, но это вряд ли относится к делу. 5. Кэшируется каким-то образом соединение PDO, но как его отключить - не знаю. Можно было бы попытаться разорвать соединение перед открытием нового соединения, но я не знаю его ID, хотя можно попробовать ID сохранить в сессию и разорвать или проверить, что оно активно (не вижу пользы от постоянного соединения, все каждый раз надо проверять активно оно или нет). ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2017, 09:42 |
|
PDO не разрывает соединение с MySQL
|
|||
---|---|---|---|
#18+
Очень смущает пункт 2 вам нужно на 100% знать что запросы из JS не кешируются Проверить легко, в скрипт PHP который вы вызываете вставьте дополнительный вывод, так же все это легко проверить и в отладчике браузера, какие запросы идут, и что возвращается. Между запросами просто остановите базу данных, для чистоты эксперимента. Чудес не бывает, после отработки PHP, все что было связано с текущим состоянием уничтожается. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2017, 12:33 |
|
PDO не разрывает соединение с MySQL
|
|||
---|---|---|---|
#18+
sxq, п.2. конечно же проверял выводом на экран того, что возвращает PHP. Нашел похожую тему аж 2008 года, но там решение не найдено: https://phpclub.ru/talk/threads/pdo-attr_persistent-всегда-true.54518/ Странно, такое чувство что PDO никто не пользуется... мало информации по этой ситуации. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2017, 12:53 |
|
PDO не разрывает соединение с MySQL
|
|||
---|---|---|---|
#18+
Привожу исходный код функции подключения к базе. Может быть я делаю что-то не так в самой обработке ошибок подключения? Это просто первый опыт, раньше с PDO не работал. Обратите внимание, я в коде специально сделал "кривыми" адрес хоста и номер порта, но скрипт отрабатывает без ошибок, используя первоначальные настройки подключения, как буд-то соединение и не разрывалось. Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2017, 13:02 |
|
PDO не разрывает соединение с MySQL
|
|||
---|---|---|---|
#18+
Алексей Смирнов, Вообще-то, соединение разрывается, когда загружены данные на страницу. Ну, так оно работает под вэб. Просто, нифига не понял в чём проблема. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2017, 13:06 |
|
PDO не разрывает соединение с MySQL
|
|||
---|---|---|---|
#18+
ShSergeАлексей Смирнов, Вообще-то, соединение разрывается, когда загружены данные на страницу. Ну, так оно работает под вэб. Просто, нифига не понял в чём проблема. Проблема в том, что я хотел посмотреть - какие ошибки возникают, если я умышленно порчу какие-то параметры подключения (см. исходный код). Но что бы я не портил, при последующих перезапусках страницы в браузере через F5 или CTRL+F5 подключение не "портится", оно отрабатывает последующие запросы так, как буд-то я строку $strDNS не испортил, т.е. ошибки выполнения не происходит, а если я делаю запросы к базе данных, то они РАБОТАЮТ! как ни в чем не бывало. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2017, 13:11 |
|
PDO не разрывает соединение с MySQL
|
|||
---|---|---|---|
#18+
Алексей Смирнов, В диспетчере задач Windows 7 висит два процесса httpd, пробовал убивать вручную. Но при повторном запуске Apache оба процесса восстанавливают как были. Подозреваю, что второй процесс httpd и держит это самое PDO, потому что если я его убиваю в диспетчере задач, не убив первый, то второй тут же самовосстанавливается (его первый похоже сам восстанавливает). ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2017, 13:14 |
|
PDO не разрывает соединение с MySQL
|
|||
---|---|---|---|
#18+
Алексей СмирновПодозреваю, что второй процесс httpd и держит это самое PDO, потому что если я его убиваю в диспетчере задач, не убив первый, то второй тут же самовосстанавливается (его первый похоже сам восстанавливает).Неправильно подозреваете. PDO - это пхпшная штуковина. А что процессов у Апача более одного - ну так он работает. Примерчик из htop [fix ] 1438 root 20 0 64504 5660 4388 S 0.0 0.0 0:00.55 ├─ /usr/sbin/httpd2 -k start 1442 apache2 20 0 1945M 11840 3232 S 0.0 0.1 0:02.60 │ ├─ /usr/sbin/httpd2 -k start 1496 apache2 20 0 1945M 11840 3232 S 0.0 0.1 0:00.08 │ │ ├─ /usr/sbin/httpd2 -k start 1495 apache2 20 0 1945M 11840 3232 S 0.0 0.1 0:00.09 │ │ ├─ /usr/sbin/httpd2 -k start 1493 apache2 20 0 1945M 11840 3232 S 0.0 0.1 0:00.09 │ │ ├─ /usr/sbin/httpd2 -k start 1491 apache2 20 0 1945M 11840 3232 S 0.0 0.1 0:00.09 │ │ ├─ /usr/sbin/httpd2 -k start 1489 apache2 20 0 1945M 11840 3232 S 0.0 0.1 0:00.09 │ │ ├─ /usr/sbin/httpd2 -k start 1487 apache2 20 0 1945M 11840 3232 S 0.0 0.1 0:00.09 │ │ ├─ /usr/sbin/httpd2 -k start 1485 apache2 20 0 1945M 11840 3232 S 0.0 0.1 0:00.09 │ │ ├─ /usr/sbin/httpd2 -k start 1483 apache2 20 0 1945M 11840 3232 S 0.0 0.1 0:00.08 │ │ ├─ /usr/sbin/httpd2 -k start 1481 apache2 20 0 1945M 11840 3232 S 0.0 0.1 0:00.09 │ │ ├─ /usr/sbin/httpd2 -k start 1479 apache2 20 0 1945M 11840 3232 S 0.0 0.1 0:00.10 │ │ ├─ /usr/sbin/httpd2 -k start 1477 apache2 20 0 1945M 11840 3232 S 0.0 0.1 0:00.09 │ │ ├─ /usr/sbin/httpd2 -k start 1475 apache2 20 0 1945M 11840 3232 S 0.0 0.1 0:00.09 │ │ ├─ /usr/sbin/httpd2 -k start 1473 apache2 20 0 1945M 11840 3232 S 0.0 0.1 0:00.09 │ │ ├─ /usr/sbin/httpd2 -k start 1471 apache2 20 0 1945M 11840 3232 S 0.0 0.1 0:00.09 │ │ ├─ /usr/sbin/httpd2 -k start 1469 apache2 20 0 1945M 11840 3232 S 0.0 0.1 0:00.10 │ │ ├─ /usr/sbin/httpd2 -k start 1467 apache2 20 0 1945M 11840 3232 S 0.0 0.1 0:00.09 │ │ ├─ /usr/sbin/httpd2 -k start 1465 apache2 20 0 1945M 11840 3232 S 0.0 0.1 0:00.09 │ │ ├─ /usr/sbin/httpd2 -k start 1463 apache2 20 0 1945M 11840 3232 S 0.0 0.1 0:00.09 │ │ ├─ /usr/sbin/httpd2 -k start 1461 apache2 20 0 1945M 11840 3232 S 0.0 0.1 0:00.10 │ │ ├─ /usr/sbin/httpd2 -k start 1459 apache2 20 0 1945M 11840 3232 S 0.0 0.1 0:00.09 │ │ ├─ /usr/sbin/httpd2 -k start 1457 apache2 20 0 1945M 11840 3232 S 0.0 0.1 0:00.13 │ │ ├─ /usr/sbin/httpd2 -k start 1454 apache2 20 0 1945M 11840 3232 S 0.0 0.1 0:00.09 │ │ ├─ /usr/sbin/httpd2 -k start 1452 apache2 20 0 1945M 11840 3232 S 0.0 0.1 0:00.09 │ │ ├─ /usr/sbin/httpd2 -k start 1450 apache2 20 0 1945M 11840 3232 S 0.0 0.1 0:00.09 │ │ ├─ /usr/sbin/httpd2 -k start 1448 apache2 20 0 1945M 11840 3232 S 0.0 0.1 0:00.09 │ │ ├─ /usr/sbin/httpd2 -k start 1446 apache2 20 0 1945M 11840 3232 S 0.0 0.1 0:00.09 │ │ └─ /usr/sbin/httpd2 -k start 1441 apache2 20 0 1945M 10424 3200 S 0.0 0.1 0:02.50 │ ├─ /usr/sbin/httpd2 -k start 1494 apache2 20 0 1945M 10424 3200 S 0.0 0.1 0:00.08 │ │ ├─ /usr/sbin/httpd2 -k start 1492 apache2 20 0 1945M 10424 3200 S 0.0 0.1 0:00.09 │ │ ├─ /usr/sbin/httpd2 -k start 1490 apache2 20 0 1945M 10424 3200 S 0.0 0.1 0:00.09 │ │ ├─ /usr/sbin/httpd2 -k start 1488 apache2 20 0 1945M 10424 3200 S 0.0 0.1 0:00.09 │ │ ├─ /usr/sbin/httpd2 -k start 1486 apache2 20 0 1945M 10424 3200 S 0.0 0.1 0:00.09 │ │ ├─ /usr/sbin/httpd2 -k start 1484 apache2 20 0 1945M 10424 3200 S 0.0 0.1 0:00.08 │ │ ├─ /usr/sbin/httpd2 -k start [/fix] ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2017, 13:21 |
|
PDO не разрывает соединение с MySQL
|
|||
---|---|---|---|
#18+
vkle, ладно, чуть позже поэкспериментирую без Ajax на чистом PHP. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2017, 13:26 |
|
PDO не разрывает соединение с MySQL
|
|||
---|---|---|---|
#18+
а почему вы думаете, что должно быть по другому? Programming PHP, Kevin Tatroe, Peter MacIntyre, and Rasmus LerdorfA function is a named block of code that performs a specific task, possibly acting upon a set of values given to it, or parameters, and possibly returning a single value. Functions save on compile time—no matter how many times you call them, functions are compiled only once for the page. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2017, 15:03 |
|
PDO не разрывает соединение с MySQL
|
|||
---|---|---|---|
#18+
Использую исключительно PDO, правда только на *NIX системах, никогда даже намека на такое не было. Сам PHP будь то PDO или Mysqli - используют одни и те же библиотеки для взаимодействия с внешними средами. Вы не сказали что происходит если между обновлениями страниц просто остановить MySql, будет ошибка или нет. Способ обмена напрямую или через ajax сути не меняет, и там и там стандартные GET/POST запросы, и если запросы не кешируются браузером, то проблема либо в библиотеке-посреднике через который работает PHP с мускулом, либо в самом мускуле. PHP отработал и все умирает в памяти, если конечно у вас при после многочисленных запросах не плодится куча процессов или не утекает память в процессе. На мой взгляд PHP + Windows - не очень хорошее решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2017, 18:36 |
|
PDO не разрывает соединение с MySQL
|
|||
---|---|---|---|
#18+
imho, там не с PDO проблема и даже не с самой функцией database_connect. из того, что тс рассказал, похоже, что просто не перегружается функция, вызывающая database_connect. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2017, 20:43 |
|
PDO не разрывает соединение с MySQL
|
|||
---|---|---|---|
#18+
sxqИспользую исключительно PDO, правда только на *NIX системах, никогда даже намека на такое не было. Сам PHP будь то PDO или Mysqli - используют одни и те же библиотеки для взаимодействия с внешними средами. Вы не сказали что происходит если между обновлениями страниц просто остановить MySql, будет ошибка или нет. Способ обмена напрямую или через ajax сути не меняет, и там и там стандартные GET/POST запросы, и если запросы не кешируются браузером, то проблема либо в библиотеке-посреднике через который работает PHP с мускулом, либо в самом мускуле. PHP отработал и все умирает в памяти, если конечно у вас при после многочисленных запросах не плодится куча процессов или не утекает память в процессе. На мой взгляд PHP + Windows - не очень хорошее решение. Я хотел универсальное решение, чтобы под Windows тоже работало. Во всяком случае библиотека mysql работает отлично. А вот mysqli мне запустить не удалось, поэтому стал смотреть в сторону PDO. Если остановить mysql на локальном компьютере, то выскакивает ошибка: Код: php 1.
Точно такая же ошибка появляется, когда я строке DSN менял адрес сервера при остановленном mysql на локальном компьютере (у меня на другом компе тоже mysql есть, доступный по сети и это гарантировано, т.к. на нем действующий проект работает): Код: php 1.
Ошибка выскакивает: Код: php 1.
(не реагирует на изменение строки DSN). Но что интересно, если я в функции меняю логин или пароль: Код: php 1.
то выскакивает ошибка mysql: Код: php 1.
Странно, что PDO не реагирует на изменения в строке DSN имени хоста, номера порта, базы данных. Т.е. как первый раз законнектился, все - не реагирует ни на какие изменения при следующем перезапуске страницы браузера. Всё же сделал отдельный файл index.php для чистоты эксперимента. Результат тот же. Ещё попробовал поменять адрес страницы с index.php на index1.php, ничего не изменилось. На строку DSN не реагирует. На мой взгляд PHP + Windows - не очень хорошее решение. Возможно сделаю на Nix со временем, но нужно, чтобы под Windows тоже работало. Библиотека mysql работает и ничего. Если с PDO такие заморочки, а mysqli библиотека вообще не подключилась, хотя я все рекомендации выполнил, то мне проще на старой библиотеке mysql остаться. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2017, 06:56 |
|
PDO не разрывает соединение с MySQL
|
|||
---|---|---|---|
#18+
vkleАлексей СмирновПодозреваю, что второй процесс httpd и держит это самое PDO, потому что если я его убиваю в диспетчере задач, не убив первый, то второй тут же самовосстанавливается (его первый похоже сам восстанавливает).Неправильно подозреваете. PDO - это пхпшная штуковина. А что процессов у Апача более одного - ну так он работает. [/fix][/spoiler] Ну хорошо). ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2017, 07:18 |
|
|
start [/forum/topic.php?fid=23&fpage=33&tid=1460646]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
51ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
92ms |
get tp. blocked users: |
2ms |
others: | 316ms |
total: | 507ms |
0 / 0 |