Когда PHP подключается к базе данных? Например:
$db = new mysqli('host', 'user', 'password', 'database');
Когда запускается класс mysqli, это когда php подключается, или только когда он вызывается:
$stmt->execute();
Я хочу знать, напишу ли я такую строку, попытается ли php подключиться или будет ждать вызова $stmt->execute();:
$stmt = $db->prepare("SELECT fname, lname WHERE id =?");






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