ProfiPHPProfiPHP
Категория: Функции баз данных MySQLi

Функция Mysqli_multi_query

Функция Mysqli_multi_query выполняет мультизапрос к базе данных.
bool mysqli_multi_query( mysqli $link, string $query )
Параметр Link являет собой идентификатор соединения, полученный с помощью Mysqli_connect или Mysqli_init.

Параметр Query должен содержать текст запроса в виде строки.

Функция Mysqli_multi_query запускает на выполнение один или несколько запросов, перечисленных через точку с запятой. Чтобы получить результирующий набор первого запроса, можно использовать функции Mysqli_use_result или Mysqli_store_result. Остальные результирующие наборы извлекаются функциями Mysqli_more_results и Mysqli_next_result.

Функция Mysqli_multi_query dозвращает FALSE, если первое выражение вызвало ошибку. Чтобы получить доступ к ошибкам остальных подзапросов, нужно сначала вызвать функцию Mysqli_next_result.

Пример работы:
$link = mysqli_connect( DB_HOST, DB_USER, DB_PASS, DB_NAME );
$query = "SELECT * FROM `table` WHERE `id` = 1;";
$query .= "SELECT `name` FROM `category` WHERE `id` = 10";
if ( mysqli_multi_query( $link, $query ) )
{
do {
if ( $result = mysqli_store_result( $link ) ) {
while ( $row = mysqli_fetch_row( $result ) ) {
echo '<pre>';
print_r( $row );
echo '</pre>';
}
mysqli_free_result( $result );
}
if ( mysqli_more_results( $link ) ) {
echo '----------------- <br />';
}
}
while ( mysqli_more_results( $link ) && mysqli_next_result( $link ) );
}
mysqli_close( $link );
Разберем данный пример:

1. Соединяемся с базой данных:
$link = mysqli_connect( DB_HOST, DB_USER, DB_PASS, DB_NAME );
2. Создаем два отдельных запроса:
$query  = "SELECT * FROM `table` WHERE `id` = 1;";
$query .= "SELECT `name` FROM `category` WHERE `id` = 10";
3. Выполняем мультизапрос к базе данных:
if ( mysqli_multi_query( $link, $query ) )
4. Создаем результующий набор запроса к базе данных:
if ( $result = mysqli_store_result( $link ) ) {
5. Получаем строки результирующей таблицы в виде массива:
while ( $row = mysqli_fetch_row( $result ) ) {
6. Освобождаем память, занятую результатами запроса:
mysqli_free_result( $result );
7. Выполняем проверку существования следующих результатов мультизапроса:
if ( mysqli_more_results( $link ) ) {
8. Продолжаем до тех пора, пока будут существовать результаты мультизапроса и возможность подготовить следующий доступный результирующий набор:
while ( mysqli_more_results( $link ) && mysqli_next_result( $link ) );
9. Закрываем соединение:
mysqli_close( $link );

Добавить комментарий

Имя:
Текст комментария: