#php #mysql #zend-framework
#php #mysql #zend-framework
Вопрос:
Я использую Zend Freamwork для своего веб-сайта. И иногда я получаю следующее исключение с моего веб-сайта:
Сообщение: SQLSTATE[42000] [1203] Пользователь elibrary_books уже имеет больше активных подключений, чем ‘max_user_connections’
Насколько я знаю, «Zend Freamwork» использует PDO для подключения к базе данных. Как я могу решить эту проблему?
Ответ №1:
Всегда закрывайте свое соединение. Если вы используете класс Sql, это выглядит так:
$sql->getAdapter()->getDriver()->getConnection()->disconnect();
Ответ №2:
Иногда поток подключения MySQL не выбрасывается, даже если вы чисто разорвали сокет; он все еще висит, ожидая, пока его извлекут.
Проверьте свои настройки на wait_timeout
. Значение по умолчанию неоправданно длинное. Оптимальное значение может составлять около 20 секунд. Вероятно, вы также захотите, чтобы он был таким низким, если вы используете постоянные подключения.
Комментарии:
1. Как я могу установить «wait_timeout» для PDO?
2. Вы можете установить wait_timeout в качестве переменной сеанса при каждом открытии соединения, выполнив запрос: SET wait_timeout=28800; Если вы используете PDO (гораздо лучший выбор, чем драйверы MySQL или MySQLi), вы можете выполнить приведенное выше утверждение, установив параметр драйвера PDO::MYSQL_ATTR_INIT_COMMAND при созданииОбъект подключения PDO.
Ответ №3:
Попробуйте установить постоянный флаг в конфигурации драйвера вашей базы данных равным false:
resources.db.params.persistent = 0
Комментарии:
1. это не помогло, я получаю то же сообщение.