Да, оператор prepare()
вызовет сервер MySQL.Подготовленные операторы выполняются на стороне сервера в два вызова: вызов PREPARE
и вызов EXECUTE
.
Например:
mysql> PREPARE stmt1 FROM 'SELECT * FROM mysql.user';
mysql> EXECUTE stmt1;
То же самое касается любого драйвера, будь тоявляется драйвером PHP драйвера JDBC.Чтобы доказать, что он действительно выполняет вызов, выполните этот код:
$mysqli->prepare('SELECT * FROM mysql.user');
... и в MySQL вы увидите следующее:
mysql> show processlist;
+-----+------+-----------+------+---------+------+-------+--------------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+------+-----------+------+---------+------+-------+--------------------------+
| 564 | root | localhost | NULL | Query | 0 | NULL | show processlist |
| 565 | root | localhost | NULL | Prepare | 0 | NULL | SELECT * FROM mysql.user |
+-----+------+-----------+------+---------+------+-------+--------------------------+
2 rows in set (0.00 sec)
Чтобы ускорить это,вы можете использовать доменные сокеты UNIX на локальном компьютере (при условии, что у вас установлена ОС POSIX).Это устраняет издержки TCP-квитирования и исправления ошибок, а также задержки в сети, поскольку они выполняются локально.
Однако лучшим решением на самом деле является абстрагирование соединений с базой данных с использованием фиктивных объектов, но вы уже зналитот.Модульный тест не является модульным тестом, если он должен подключаться к базе данных: это интеграционный тест.