В чем разница между mysqli::query
и mysqli::real_query
?
ИЛИ
В чем разница между mysqli_query
и mysqli_real_query
?
В чем разница между mysqli::query
и mysqli::real_query
?
ИЛИ
В чем разница между mysqli_query
и mysqli_real_query
?
Посмотрите документацию mysqli_query():
Функционально использование этой функции идентично вызову mysqli_real_query(), за которым следует либо mysqli_use_result(), либо mysqli_store_result().
Из того, что я понимаю, real_query фактически выполняет запрос, а use/store_result инициирует процесс получения набора результатов для запроса. query() делает оба.
mysqli::query
вернет результат, если он есть.
mysql::real_query
вернет true при успешном выполнении или false, если не
Вы могли видеть это в php doc:
Немного поздно, но самым большим достижением для меня является использование ОЗУ, когда эти функции вызываются с настройками по умолчанию: с mysqli_real_query()
вы не копируете весь результат в ОЗУ, что по умолчанию делает mysqli_query()
(хотя его можно изменить с помощью параметра $resultmode
).
На практике есть другое отличие, которого я не вижу в других ответах. Вам может понадобиться использовать mysqli_real_query()
для оператора CALL
.
Если вы вызываете хранимую процедуру, она может вернуть более одного результата. mysqli_query()
будет получать первый результат, но может быть больше результатов, которые необходимо получить, и это может привести к ошибке. Вам нужно использовать mysqli_real_query
(или mysqli_multi_query()
) для получения этих наборов результатов.
К сожалению, это объяснение содержится в разделе хранимых процедур в документации по PHP, поэтому его трудно найти.
Я на всякий случай приведу пример кода, вызывающего процедуру, которая предполагает возврат нескольких наборов результатов, используя mysqli::real_query
:
$query="CALL storedProcedure()";
if($conn->real_query($query)){
do{
if($result=$conn->store_result()) {
while($row=$result->fetch_assoc()) {
print_r($row);
}
$result->free();
}
}while($conn->more_results() && $conn->next_result());
}