У меня есть следующий код в db.php для подключения к моей БД.
<?php $DB_HOST = "localhost"; $DB_NAME = "db"; $DB_USER = "user"; $DB_PASSWORD = "pass"; $con = mysql_connect($DB_HOST, $DB_USER, $DB_PASSWORD); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db($DB_NAME , $con); ?>
В моем другом сценарии я включаю его, используя:
include("db.php");
В некоторых случаях я получаю ошибку ff:
[10-Mar-2012 10:47:20] PHP Предупреждение: mysql_connect () [function.mysql-connect]: пользователь db_user уже имеет более активных соединений max_user_connections в /home/user/public_html/sc/db.php в строке 8
Теперь мне интересно, нужно ли мне закрыть соединение, например:
<?php include("db.php"); //other stuff here mysql_close($con); ?>
в<?php include("db.php"); //other stuff here mysql_close($con); ?>
BTW, я имею значение 100 max_connections в моей конфигурации MySQL.
Я также изучаю постоянное соединение, и я считаю, что мой код выше не является постоянным соединением.
Нет, это не поможет вам, если вы закроете его в конце скрипта. mysql_close()
полезен только в том случае, если вы хотите освободить ресурсы до того, как закончите свой скрипт, потому что ваше соединение закрывается, как только выполнение скрипта заканчивается
Если вы не закрываете свои подключения, они останутся открытыми и возьмут драгоценные ресурсы на сервере. Я думаю, там есть и точка безопасности, вы не хотите, чтобы кто-то задерживал связь.
Я предпочитаю помещать свою базу данных в класс и использовать __construct для создания соединения, а __destruct – закрыть соединение. Если вы не знакомы с классами. __construct и __destruct вызывается автоматически при создании и уничтожении класса.
Редактировать:
Первоначально предполагалось, что это будет пример. Но у меня есть базовый, но рабочий класс mysql https://stackoverflow.com/a/9651249/1246494 .
Он показывает использование mysql_close и как я пытался связать его с деструктором класса. Дело в том, что любое сетевое соединение должно быть закрыто, независимо от того, находится ли ваша база данных на удаленном сервере или localhost.