It's very important that after executing mysqli_multi_query you have first process the resultsets before sending any another statement to the server, otherwise your
socket is still blocked.
Please note that even if your multi statement doesn't contain SELECT queries, the server will send result packages containing errorcodes (or OK packet) for single statements.
mysqli_multi_query
mysqli->multi_query()
(PHP 5)
mysqli_multi_query -- mysqli->multi_query() — Performs a query on the database
Descrição
Modo procedural:
Modo orientado a objeto (método):
Executa um ou múltiplas queries que são concatenadas com ponto-e-vírgula.
Para recuperar o conjunto de resultado da primeira query, você pode usar mysqli_use_result() ou mysqli_store_result(). Todos os resultados de queries subseqüentes podem ser processados usando mysqli_more_results() e mysqli_next_result().
Parâmetros
- link
-
Apenas para estilo de procedimento: Um identificador de conexão retornado por mysqli_connect() or mysqli_init()
- query
-
A query, como uma string.
Valor Retornado
Retorna FALSE se o primeiro comando falhar. Para recuperar erros subseqüentes de outros comandos, você terá que chamar mysqli_next_result() primeiro.
Exemplos
Exemplo #1 Modo orientado a objeto
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$query = "SELECT CURRENT_USER();";
$query .= "SELECT Name FROM City ORDER BY ID LIMIT 20, 5";
/* execute multi query */
if ($mysqli->multi_query($query)) {
do {
/* store first result set */
if ($result = $mysqli->store_result()) {
while ($row = $result->fetch_row()) {
printf("%s\n", $row[0]);
}
$result->free();
}
/* print divider */
if ($mysqli->more_results()) {
printf("-----------------\n");
}
} while ($mysqli->next_result());
}
/* close connection */
$mysqli->close();
?>
Exemplo #2 Modo procedural
<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$query = "SELECT CURRENT_USER();";
$query .= "SELECT Name FROM City ORDER BY ID LIMIT 20, 5";
/* execute multi query */
if (mysqli_multi_query($link, $query)) {
do {
/* store first result set */
if ($result = mysqli_store_result($link)) {
while ($row = mysqli_fetch_row($result)) {
printf("%s\n", $row[0]);
}
mysqli_free_result($result);
}
/* print divider */
if (mysqli_more_results($link)) {
printf("-----------------\n");
}
} while (mysqli_next_result($link));
}
/* close connection */
mysqli_close($link);
?>
O exemplo acima irá imprimir algo similar a:
my_user@localhost ----------------- Amersfoort Maastricht Dordrecht Leiden Haarlemmermeer
mysqli_multi_query
27-Aug-2008 06:05
