Не удается передать соединение MySQL в сеансе в PHP - PullRequest
10 голосов
/ 24 января 2010

Я пытаюсь передать сеанс с подключением mysqli для нескольких запросов на сайте, но когда я пытаюсь выполнить запрос, выдается предупреждение «Не удалось получить mysqli»

$_SESSION['db']=new mysqli($host,$username,$password,$db);

Невозможно передать ссылку на соединение mysqli через сессию? Есть ли другой метод для использования?

Ответы [ 3 ]

16 голосов
/ 24 января 2010

Да, это явно невозможно.

См. Документация PHP здесь упоминание в выделенном предупреждении: "Некоторые типы данных не могут быть сериализованы, поэтому хранятся в сеансах. Они включают в себя переменные ресурса или объекты с циклическими ссылками (т.е. объекты, которые передаются ссылка на себя другого объекта). "

MySQL-соединения являются одним из таких ресурсов.

Вы должны переподключаться при каждом запуске страницы.

Это не так плохо, как кажется, если вы можете положиться на пул соединений с помощью mysql_pconnect () , но сначала просмотрите дополнительную информацию о mysql_pconnect () в этой статье .

2 голосов
/ 24 января 2010

Соединения с базой данных являются ресурсами и не могут быть сохранены в сеансе. Вам придется перестраивать соединение на каждой странице или использовать постоянное соединение (PHP 5.3+).

1 голос
/ 24 января 2010

Да, вы не можете пройти через сеанс. Дескриптор специфичен для запроса. Вы можете поместить его в общий ресурс, такой как memcache, и извлекать дескриптор, когда вам это нужно.

Однако, если вы используете пул соединений, захват нового дескриптора, когда вам нужно (и закрытие его, когда вы закончите), не сильно снизит производительность.

Всегда зависит от ваших потребностей, но да, я бы либо:

  • Создать новый дескриптор, когда он вам нужен / для каждого запроса / (включить пул соединений)
  • Вставьте ручку в memcache
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...