Когда PHP подключается к базе данных?

Когда PHP подключается к базе данных? Например:

$db = new mysqli('host', 'user', 'password', 'database');

Когда запускается класс mysqli, это когда php подключается, или только когда он вызывается:

$stmt->execute();

Я хочу знать, напишу ли я такую ​​строку, попытается ли php подключиться или будет ждать вызова $stmt->execute();:

$stmt = $db->prepare("SELECT fname, lname WHERE id =?");
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
4
0
110
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот разбивка вашего скрипта:

$db = new mysqli('host', 'user', 'password', 'database');

Это создаст соединение новый с базой данных на host с использованием учетных данных user и password и схемы базы данных database. Напротив

$db = new mysqli('p:host', 'user', 'password', 'database');

попытается повторно использовать существующее соединение из пула доступных соединений (источник)

Физический TCP-сокет остается активным до вызова mysqli->close или завершения сценария. Вы можете подтвердить, что это реальное поведение, выполнив:

$db = new mysqli('host', 'user', 'password', 'database');
sleep(1000);

а затем запустите show processlist в вашей базе данных MySQL, чтобы убедиться, что есть физическое соединение с базой данных, которое может быть активным или спящим, но физическая ссылка будет там и порт будет использоваться.

$stmt = $db->prepare("SELECT fname, lname WHERE id =?");

Отправит запрос на сервер MySQL для подготовки этого оператора, и вы получите обратно ссылку на подготовленный оператор. Обратите внимание, что подготовка оператора - это то, что происходит на сервере базы данных, если вы не используете PDO и не эмулируете подготовку.

$stmt->execute();

Выполнит заранее подготовленный оператор. Это снова происходит на сервере базы данных, и открывается ресурс результата, который можно использовать для получения результата. Обратите внимание, что в отличие от PDO, в MySQLi ресурс оператора действует как как оператор, так и как результат, и это то, что вы будете использовать для получения набора результатов (либо как поток, либо все сразу). Оператор необходимо закрыть или иным образом удалить, прежде чем вы сможете выполнить другой оператор по той же ссылке. Вот почему вы можете вызвать $stmt->close(), когда вам нужно это сделать.

Чтобы закрыть соединение, вам нужно запустить $db->close() или дождаться завершения скрипта. Обратите внимание: если вы используете постоянное соединение, физическая ссылка не закрывается, а возвращается в пул соединений и становится доступной для повторного использования. Пулы необходимы, потому что одновременные пользователи не должны использовать одну и ту же физическую ссылку.

Другие вопросы по теме