Подтвердить что ты не робот

Разница между mysqli_query и mysqli_real_query

В чем разница между mysqli::query и mysqli::real_query?

ИЛИ

В чем разница между mysqli_query и mysqli_real_query?

4b9b3361

Ответ 1

Посмотрите документацию mysqli_query():

Функционально использование этой функции идентично вызову mysqli_real_query(), за которым следует либо mysqli_use_result(), либо mysqli_store_result().

Из того, что я понимаю, real_query фактически выполняет запрос, а use/store_result инициирует процесс получения набора результатов для запроса. query() делает оба.

Ответ 2

mysqli::query вернет результат, если он есть.

mysql::real_query вернет true при успешном выполнении или false, если не

Вы могли видеть это в php doc:

Ответ 3

Немного поздно, но самым большим достижением для меня является использование ОЗУ, когда эти функции вызываются с настройками по умолчанию: с mysqli_real_query() вы не копируете весь результат в ОЗУ, что по умолчанию делает mysqli_query() (хотя его можно изменить с помощью параметра $resultmode).

Ответ 4

На практике есть другое отличие, которого я не вижу в других ответах. Вам может понадобиться использовать 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());          
}