Проверьте соединение MySQL - PullRequest
1 голос
/ 01 августа 2011

Я параноидальный тип парня, и хотя я включил mysql_close() в свои функции PHP после того, как что-то сделал, есть ли способ проверить (кроме другого запроса), чтобы увидеть, открыто ли еще соединение, просто для гарантия.

Ответы [ 4 ]

5 голосов
/ 01 августа 2011

Функция mysql_close() возвращает true в случае успеха. Добавляя дополнительную проверку вне проверки возвращаемого значения mysql_close(), вы не делаете ничего полезного, и добавление еще одного места может привести к появлению ошибок в вашем коде.

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

1 голос
/ 01 августа 2011

Вы можете попробовать mysql_ping ()

Вот выдержка из этой страницы:

bool mysql_ping ([ resource $link_identifier ] )
Checks whether or not the connection to the server is working.
If it  has gone down, an automatic reconnection is attempted.
This function can be used by scripts that remain idle for a long while,
to check whether or not the server has closed the connection and
reconnect if necessary. 

Note:  Since MySQL 5.0.13, automatic reconnection feature is disabled.

Что касается этого отрывка, я не знаю, отключена ли функция автоматического переподключения . Комментарий относится к mysql или PHP. Вам придется поэкспериментировать с этим, чтобы узнать. Если эта проблема переподключения действительно верна, то ответ @ Brad является параноидальным, так как вы можете запустить mysql_close сразу после запроса данных и их извлечения. В этот момент вы можете быть уверены, что нет действительного соединения, поскольку вы явно его закрыли. Следовательно, для следующего запроса вам нужно будет выполнить mysql_connect.

Однако не всегда рекомендуется закрывать непостоянные соединения самостоятельно, поскольку это может потенциально накапливать TIME_WAIT в netstat БД-сервера. Это заставило бы веб-серверы думать, что Соединения с БД больше не доступны, потому что MySQL выбежал там, где на самом деле была причина ОС, поскольку это задержало бы выпуск ресурсов Соединений. Для большей безопасности, извините, запустите mysql_close, когда закончите, и mysql_connect / mysql_query для следующего запроса.

Если вы хотите, вы можете создать парадигму try-catch или набор утверждений if-then-else для первого запуска mysql_ping для установленного соединения. Если это правда, используйте его с mysql_query. В противном случае запустите mysql_close / mysql_connect / mysql_query.

0 голосов
/ 01 августа 2011

AFAIK, если вы открываете соединение mysql с помощью mysql_pconnect (), они не закрываются после mysql_close (), это просто возврат в пул соединений

0 голосов
/ 01 августа 2011
$con = mysql_connect("localhost" ,"name", "pass");
/* your code*/

if ($con){
   mysql_close();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...