mysqli::multi_query
mysqli_multi_query
(PHP 5, PHP 7, PHP 8)
mysqli::multi_query -- mysqli_multi_query — Executa uma ou mais consultas no banco de dados
Descrição
Estilo orientado a objetos
Consultas são enviadas de forma assíncrona em uma única chamada ao banco, mas o
banco de dados processa-as sequencialmente.
mysqli_multi_query() espera pela finalização da primeira
consulta antes de retornar o controle ao PHP. O servidor MySQL então processará
a próxima consulta na sequência. Uma vez que o resultado seguinte ficar pronto, o MySQL esperará
pela próxima execução de mysqli_next_result() pelo PHP.
É recomendado usar
do-while para processar consultas
múltiplas. A conexão estará ocupada enquanto todas as consultas tiverem concluído e
seus resultados enviados ao PHP. Nenhuma outra declaração pode ser emitida na
mesma conexão até que todas as consultas sejam processadas.
Para proceder à consulta seguinte, use
mysqli_next_result(). Se a consulta seguinte ainda não estiver pronta,
mysqli esperará pela resposta do servidor MySQL.
Para verificar se há mais resultados,
use mysqli_more_results().
Para consultas que produzem um conjnto de resultados, como em
SELECT, SHOW, DESCRIBE
ou
EXPLAIN
,
mysqli_use_result() ou mysqli_store_result()
podem ser usadas para recuperar o conjunto. Para consultas que não produzem um
conjunto de resultados, as mesmas funções podem ser usadas para recuperar informação como
o número de linhas afetadas.
Dica
Executar declarações CALL
para procedimentos armazenados pode
produzir múltiplos conjuntos de resultados. Se o procedimento armazenado contiver
declarações SELECT
, os conjuntos são retornados na
ordem em que são produzidos enquando o procedimento é executado. Em geral, a função que
chama não sabe quantos conjuntos de resultados um procedimento irá retornar e deve
estar preparada para recuperar múltiplos conjuntos. O resultado final do procedimento
é um resultado de estado que não inclui nenhum conjunto. O estado indica se
o procedimento teve sucesso ou se ocorreu um erro.
Parâmetros
-
mysql
Somente no estilo procedural: Um objeto mysqli
retornado por mysqli_connect() ou mysqli_init()
query
-
Uma string contendo as consultas que serão executadas.
Consultas múltiplas devem ser separadas por ponto-e-vírgula (;).
Valor Retornado
Retorna false
se a primeira consulta falhar.
Para recuperar erros subsequentes de outras consultas, deve-se chamar
mysqli_next_result() primeiro.
Exemplos
Exemplo #1 Exemplo de mysqli::multi_query()
Estilo orientado a objetos
<?php
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";
/* executa as consultas múltiplas */
$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());
<?php
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";
/* executa as consultas múltiplas */
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));
Os exemplos acima produzirão
algo semelhante a:
my_user@localhost
-----------------
Amersfoort
Maastricht
Dordrecht
Leiden
Haarlemmermeer