В большинстве случаев нет причин использовать mysql_close () в сочетании с постоянными соединениями, но ниже приводится некоторое объяснение.
Прежде всего, вы должны сделать различие между ресурсом (переменная PHP, внутренне: zval) и соединение (например, соединение TCP или сокета, также называемое «ссылкой»).
Когда вы вызываете mysql_connect (), новый соединение создается каждый раз, и возвращается новый ресурс .Несколько вызовов mysql_connect () в одном и том же скрипте создадут несколько соединений, и будет возвращен соответствующий ресурс.
Когда вы вызываете mysql_pconnect (), создается новое соединение если в текущем процессе PHP не найдено активное постоянное соединение и каждый раз также возвращается новый ресурс .Многократные вызовы mysql_pconnect () вернут разные ресурсы , которые все указывают на одно и то же соединение .
mysql_close () будут действовать как на соединение и ресурс :
- Если соединение, указанное ресурсом, является , а не постоянным, соединение закрывается.
- Ресурс уничтожается в каждом случае.
Это означает, что при использовании mysql_close () для постоянного соединения у вас больше нет возможности использовать соединение, даже если этоодин еще открыт, вы можете отладить его с помощью:
<?php
$connp = mysql_pconnect("localhost", "root", "password");
mysql_close($connp);
sleep(60);
?>
и, глядя в MySQL, что соединение все еще активно:
SHOW PROCESSLIST;
Если в вашем сообщении об ошибке включены предупреждения, вымог бы увидеть сообщение вроде:
Warning: mysql_ping(): 4 is not a valid MySQL-Link resource in ... on line ...
Единственный способ использовать ранее созданное постоянное соединение - это снова создать новый ресурс , который будет указывать на него:
$connp = mysql_pconnect("localhost", "root", "password");
Использование mysql_thread_id ()ресурс предоставит вам идентификатор соединения MySQL, так что вы можете быть уверены, что mysql_close () действительно не закрывает постоянное соединение, а только уничтожает ресурс:
<?php
$conn = mysql_connect("localhost", "root", "password");
echo mysql_thread_id($conn), "\n";
mysql_close($conn);
$connp1 = mysql_pconnect("localhost", "root", "password");
echo mysql_thread_id($connp1), "\n";
mysql_close($connp1);
$connp2 = mysql_pconnect("localhost", "root", "password");
echo mysql_thread_id($connp2), "\n";
mysql_close($connp2);
?>
Это выдаст что-то вроде:
61
62
62