Подключен ли PDO к базе данных сразу или после подготовки / запроса - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь написать код с несколькими классами, у которого будет много подключений / запросов к БД.

Мой вопрос: подключается ли PDO к базе данных, как только будет выполнена следующая строка, и она будет оставаться подключенной, пока не будет закрыта?

$pdo = new PDO($dsn, $user, $pass, $options);

Или он ожидает, пока мы не выполним следующее подключение, например:

$stmt = $pdo->prepare('SELECT * FROM users WHERE id = ?');
$stmt->execute([$email]);
$user = $stmt->fetch();

// Closing connection
$stmt = null;

Если он не подключается сразу, когда мы делаем new PDO(), тогда я могу легко сделать переменную $pdo глобальной и использовать ее в каждом классе, в противном случае мне нужно подключиться в каждом классе отдельно с помощью метода __construct(), а затем закрыть соединение по методу __destruct(). (я до сих пор не уверен, что это лучший способ повысить производительность)

P.S. Нужно ли нам также установить $pdo = null, чтобы закрыть соединение? или $stmt = null достаточно?

1 Ответ

1 голос
/ 08 апреля 2019

Когда вы создаете экземпляр new PDO(), он пытается сохранить соединение с базой данных.

Соединения создаются путем создания экземпляров базового класса PDO.

Источник

Я бы предложил избегать использования глобальных переменных , если ваша кодовая база относительно не мала. Вы будете делиться своим экземпляром базы данных там, где его нельзя делить!

Возможно, мы сможем создать одноэлементный класс для подключения к вашей базе данных. Это сделано для того, чтобы мы могли получить один экземпляр соединения и выполнить всю необходимую работу перед закрытием соединения после завершения работы с базой данных.

Было бы неплохо закрыть соединение с базой данных раньше. Тем не менее, PHP сделает это за вас после того, как скрипт завершит выполнение.

Если вы не сделаете это явно, PHP автоматически закроет соединение, когда ваш скрипт завершится.

Источник

Надеюсь, это поможет! ??

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...