Вот разбивка вашего скрипта:
$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()
или дождаться завершения сценария.Обратите внимание, что если вы используете постоянное соединение, то физическая ссылка не закрывается, а возвращается в пул соединений и становится доступной для повторного использования.Пулы необходимы, поскольку одновременные пользователи не должны использовать одну и ту же физическую ссылку.