Php multi query mysql

mysqli::multi_query

Выполняет один или несколько запросов,соединенных точкой с запятой.

Запросы отправляются асинхронно за один вызов базы данных, но база данных обрабатывает их последовательно. mysqli_multi_query () ожидает завершения первого запроса, прежде чем вернуть управление PHP. Затем сервер MySQL обработает следующий запрос в последовательности. Как только следующий результат будет готов, MySQL будет ждать следующего выполнения mysqli_next_result () из PHP.

Для обработки нескольких запросов рекомендуется использовать do-while . Соединение будет занято до тех пор, пока все запросы не будут завершены и их результаты не будут загружены в PHP. Никакой другой оператор не может быть выдан в том же соединении, пока не будут обработаны все запросы. Чтобы перейти к следующему запросу в последовательности, используйте mysqli_next_result () . Если следующий результат еще не готов, mysqli будет ждать ответа от сервера MySQL. Чтобы проверить, есть ли еще результаты, используйте mysqli_more_results () .

Для запросов, которые производят набор результатов, таких как SELECT, SHOW, DESCRIBE или EXPLAIN , для получения набора результатов можно использовать mysqli_use_result () или mysqli_store_result () . Для запросов, которые не производят набор результатов, те же функции могут использоваться для получения информации, такой как количество затронутых строк.

Выполнение операторов CALL для хранимых процедур может дать несколько наборов результатов. Если хранимая процедура содержит SELECT , наборы результатов возвращаются в том порядке, в котором они создаются при выполнении процедуры. Как правило, вызывающий не может знать, сколько наборов результатов вернет процедура, и должен быть готов получить несколько результатов. Конечный результат процедуры — это результат статуса, который не включает набор результатов. Статус показывает, была ли процедура успешной или произошла ошибка.

Parameters

Только процедурный стиль: объект mysqli, возвращаемый mysqli_connect () или mysqli_init ()

Строка,содержащая запросы,которые должны быть выполнены.Несколько запросов должны быть разделены точкой с запятой.

Предупреждение о безопасности:SQL-инъекция

Если запрос содержит какие-либо входные переменные, вместо этого следует использовать параметризованные подготовленные операторы . В качестве альтернативы данные должны быть правильно отформатированы, а все строки должны быть экранированы с помощью функции mysqli_real_escape_string () .

Return Values

Возвращает false , если первая инструкция не удалась. Чтобы получить последующие ошибки из других операторов, вы должны сначала вызвать mysqli_next_result () .

Examples

Пример # 1 MySQLi :: multi_query () Пример

 mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); $mysqli = new mysqli("localhost", "my_user", "my_password", "world"); $query = "SELECT CURRENT_USER();"; $query .= "SELECT Name FROM City ORDER BY ID LIMIT 20, 5"; /* execute multi query */ $mysqli->multi_query($query); do < /* store the result set in PHP */ if ($result = $mysqli->store_result()) < while ($row = $result->fetch_row()) < printf("%s\n", $row[0]); > > /* print divider */ if ($mysqli->more_results()) < printf("-----------------\n"); > > while ($mysqli->next_result());
 mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); $link = mysqli_connect("localhost", "my_user", "my_password", "world"); $query = "SELECT CURRENT_USER();"; $query .= "SELECT Name FROM City ORDER BY ID LIMIT 20, 5"; /* execute multi query */ mysqli_multi_query($link, $query); do < /* store the result set in PHP */ if ($result = mysqli_store_result($link)) < while ($row = mysqli_fetch_row($result)) < printf("%s\n", $row[0]); > > /* print divider */ if (mysqli_more_results($link)) < printf("-----------------\n"); > > while (mysqli_next_result($link));

Из приведенных выше примеров будет выведено нечто похожее:

my_user@localhost ----------------- Amersfoort Maastricht Dordrecht Leiden Haarlemmermeer
See Also
  • mysqli_query () — Выполняет запрос к базе данных
  • mysqli_use_result () — Инициирует получение набора результатов
  • mysqli_store_result () — передает набор результатов из последнего запроса
  • mysqli_next_result () — Готовит следующий результат из multi_query
  • mysqli_more_results () — Проверяет, есть ли еще результаты запроса из мультизапроса
PHP 8.2

(PHP 5,7,8)mysqli::kill mysqli_kill Запрашивает у сервера поток Объектно-ориентированный стиль Процедурный стиль Эта функция используется для запроса сервера убить MySQL

(PHP 5,7,8)mysqli::more_results mysqli_more_results Проверяет,есть ли запросы из нескольких Объектно-ориентированный стиль Процедурный стиль Указывает,если один

(PHP 5,7,8)mysqli::next_result mysqli_next_result Подготовка из мультизапроса Объектно-ориентированный стиль Процедурный стиль Подготовка следующего набора результатов из предыдущего

(PHP 5,7,8)mysqli::options mysqli_options Set Объектно-ориентированный стиль Процедурный стиль Используется для установки дополнительных опций подключения и влияет на поведение при подключении.

Источник

Php multi query mysql

Suggested improvement(s) to example 1.

reasons:
Multi_query only returns a non false response if a data/result set is returned and only checks for the first query entered. Switching the first SELECT query with the INSERT query will result in a premature exit of the example with the message «Multi query failed: (0)».
The example assumes that once the first query doesn’t fail that the other queries have succeeded as well. Or rather it just exits without reporting that one of the queries after the first query failed seeing that if a query fails next_result returns false.

The changes in the example comes after the creation of the string $sql.

$mysqli = new mysqli ( «example.com» , «user» , «password» , «database» );
if ( $mysqli -> connect_errno ) echo «Failed to connect to MySQL: (» . $mysqli -> connect_errno . «) » . $mysqli -> connect_error ;
>

if (! $mysqli -> query ( «DROP TABLE IF EXISTS test» ) || ! $mysqli -> query ( «CREATE TABLE test(id INT)» )) echo «Table creation failed: (» . $mysqli -> errno . «) » . $mysqli -> error ;
>

$sql = «SELECT COUNT(*) AS _num FROM test; » ;
$sql .= «INSERT INTO test(id) VALUES (1); » ;
$sql .= «SELECT COUNT(*) AS _num FROM test; » ;

// changes to example 1 start here

// don’t bother checking the result from multi_query since it will return false
// if the first query does not return data even if the query itself succeeds.
$mysqli -> multi_query ( $sql );

do // while (true); // exit only on error or when there are no more queries to process
// check if query currently being processed hasn’t failed
if ( 0 !== $mysqli -> errno )
echo «Multi query failed: (» . $mysqli -> errno . «) » . $mysqli -> error ;
break;
>

// exit loop if there ar no more queries to process
if ( false === ( $mysqli -> more_results () )
break;
>

// get result of the next query to process
// don’t bother to check for success/failure of the result
// since at the start of the loop there is an error check &
// report block.
$mysqli -> next_result ()

> while ( true ); // exit only on error or when there are no more queries to process
?>

Note that the normal while ($mysqli->more_results() && $mysqli->next_result() has been replaced by two checks and while (true);
This is due to the ‘problem’ that next_result will return false if the query in question failed.
So one either needs to do one last check after the while loop to check if there was an error or one has to split up the different actions.
The changes in the example do the splitting.

Источник

PHP mysqli_multi_query() Function

The mysqli_multi_query() function accepts a string value representing a query as one of the parameters and, executes/performs the given query on the database.

You can also pass multiple queries to this function by separating them with a semicolon.

You can retrieve the resultset from this function (in case of SELECT, SHOW, DESCRIBE and EXPLAIN queries) using the mysqli_use_result() and mysqli_more_results() or ysqli_store_result() and mysqli_next_result() functions.

Syntax

mysqli_multi_query($con, query)

Parameters

This is an object representing a connection to MySQL Server.

This is a string value representing the query to be executed.

This is a integer value representing the result mode. You can pass MYSQLI_USE_RESULT or MYSQLI_STORE_RESULT as values to this parameter.

Return Values

The mysqli_multi_query() function returns false incase of the first function.

PHP Version

This function was first introduced in PHP Version 5 and works works in all the later versions.

Example

Following example demonstrates the usage of the mysqli_multi_query() function (in procedural style) −

This will produce following result −

If you observe the contents of the table in the database you can see the inserted records as shown below −

mysql> select * from players; +------------+-----------+-------------+ | First_Name | Last_Name | Country | +------------+-----------+-------------+ | Shikhar | Dhawan | India | | Jonathan | Trott | SouthAfrica | +------------+-----------+-------------+ 2 rows in set (0.00 sec)

Example

In object oriented style the syntax of this function is $con->multi_query(); Following is the example of this function in object oriented style $minus;

multi_query($query); print("Data Created. "); //Closing the connection $res = $con -> close(); ?>

This will produce following result −

Example

Following example creates a table and populates it by executing the queries one by one using the mysqli_multi_query() function −

This will produce following result −

Table Created . Records Inserted .

Example

Assume we have created a table players in the database and populated it, as shown below −

CREATE TABLE Players (Name VARCHAR(255), Age INT, Score INT); insert into Players values('Dhavan', 33, 90),('Rohit', 28, 26),('Kohli', 25, 50);

Following example retrieves the resultset from a mysqli_multi_query function −

 mysqli_free_result($result); > if (mysqli_more_results($con)) < print("\n"); >> while (mysqli_next_result($con)); > mysqli_close($con); ?>

This will produce following result −

Name: Dhavan Age: 33 Name: Rohit Age: 28 Name: Kohli Age: 25 Name: Raju Age: 25 Name: Rahman Age: 30 Name: Ramani Age: 22

Источник

mysqli_multi_query

Запускает на выполнение один или несколько запросов, перечисленных через точку с запятой.

Чтобы получить результирующий набор первого запроса, можно использовать функции mysqli_use_result() или mysqli_store_result() . Остальные результирующие наборы извлекаются функциями mysqli_more_results() и mysqli_next_result() .

Список параметров

Только для процедурного стиля: Идентификатор соединения, полученный с помощью mysqli_connect() или mysqli_init()

Текст запроса в виде строки.

Данные внутри запроса должны быть правильно экранированы.

Возвращаемые значения

Возвращает FALSE , если первое выражение вызвало ошибку. Чтобы получить доступ к ошибкам остальных подзапросов, нужно сначала вызвать функцию mysqli_next_result() .

Примеры

Пример #1 Пример использования mysqli::multi_query()

$mysqli = new mysqli ( «localhost» , «my_user» , «my_password» , «world» );

/* проверка соединения */
if ( mysqli_connect_errno ()) printf ( «Не удалось подключиться: %s\n» , mysqli_connect_error ());
exit();
>

$query = «SELECT CURRENT_USER();» ;
$query .= «SELECT Name FROM City ORDER BY ID LIMIT 20, 5» ;

/* запускаем мультизапрос */
if ( $mysqli -> multi_query ( $query )) do /* получаем первый результирующий набор */
if ( $result = $mysqli -> store_result ()) while ( $row = $result -> fetch_row ()) printf ( «%s\n» , $row [ 0 ]);
>
$result -> free ();
>
/* печатаем разделитель */
if ( $mysqli -> more_results ()) printf ( «——————\n» );
>
> while ( $mysqli -> next_result ());
>

/* закрываем соединение */
$mysqli -> close ();
?>

$link = mysqli_connect ( «localhost» , «my_user» , «my_password» , «world» );

/* проверка соединения */
if ( mysqli_connect_errno ()) printf ( «Не удалось подключиться: %s\n» , mysqli_connect_error ());
exit();
>

$query = «SELECT CURRENT_USER();» ;
$query .= «SELECT Name FROM City ORDER BY ID LIMIT 20, 5» ;

/* запускаем мультизапрос */
if ( mysqli_multi_query ( $link , $query )) do /* получаем первый результирующий набор */
if ( $result = mysqli_store_result ( $link )) while ( $row = mysqli_fetch_row ( $result )) printf ( «%s\n» , $row [ 0 ]);
>
mysqli_free_result ( $result );
>
/* печатаем разделитель */
if ( mysqli_more_results ( $link )) printf ( «——————\n» );
>
> while ( mysqli_next_result ( $link ));
>

/* закрываем соединение */
mysqli_close ( $link );
?>

Результатом выполнения данных примеров будет что-то подобное:

my_user@localhost ----------------- Amersfoort Maastricht Dordrecht Leiden Haarlemmermeer

Смотрите также

  • mysqli_query() — Выполняет запрос к базе данных
  • mysqli_use_result() — Готовит результирующий набор на сервере к использованию
  • mysqli_store_result() — Передает результирующий набор последнего запроса
  • mysqli_next_result() — Подготовка следующего доступного результирующего набора из multi_query
  • mysqli_more_results() — Проверка, есть ли еще результаты в мультизапросе

Источник

Читайте также:  Графические форматы html страница
Оцените статью