#php #mysql #database #mysqli
#php #сеанс #mysqli
Вопрос:
Я пытаюсь передать сеанс с подключением mysqli для нескольких запросов на сайте, но когда я пытаюсь выполнить запрос, он выдает предупреждение «Не удалось получить mysqli»
$_SESSION['db']=new mysqli($host,$username,$password,$db);
Невозможно ли передать ссылку на соединение mysqli через сеанс? есть ли другой метод для использования?
Ответ №1:
Да, это явно невозможно.
Смотрите Документацию PHP здесь, в выделенном предупреждении упоминается: «Некоторые типы данных не могут быть сериализованы, поэтому хранятся в сеансах. Он включает в себя переменные ресурсов или объекты с циклическими ссылками (т. Е. Объекты, Которые передают ссылку на себя другому объекту).»
Соединения MySQL являются одним из таких ресурсов.
Вы должны повторно подключаться при каждом запуске страницы.
Это не так плохо, как кажется, если вы можете полагаться на объединение в пул соединений через mysql_connect(), но сначала ознакомьтесь с дополнительной справочной информацией о mysql_connect() в этой статье.
Ответ №2:
Соединения с базой данных являются ресурсами и не могут быть сохранены в сеансе. Вам придется перестраивать соединение на каждой странице или использовать постоянное соединение (PHP 5.3 ).
Ответ №3:
Да — вы не можете передать его через сеанс. Дескриптор специфичен для запроса. Возможно, вы сможете поместить его в общий ресурс, такой как memcache, и получить дескриптор, когда он вам понадобится.
Однако, если вы используете объединение пулов соединений, получение нового дескриптора, когда вам нужно (и закрытие его, когда вы закончите), не сильно влияет на производительность.
Всегда зависит от ваших потребностей, но да, я бы либо:
- Создайте новый дескриптор, когда он вам понадобится / по запросу / (включите объединение пулов соединений)
- Вставьте дескриптор dbhandle в memcache