| Executing multiple queries with the mysqli interface requires a call to mysqli_multi_query(), then successive calls to ... 
... until there are no more queries to process. Here is a simple example with redundant calls to show what is happening at each step:mysqli_store_result() to capture the next resultmysqli_field_count() to find if the query was written to return data columnsenough calls to mysqli_fetch_row() to fetch the resultset if there is onemysqli_free_result() to free the resultset buffermysqli_more_results to see if there are more queriesmysqli_next_result() to prepare the next result. 
 
 
<?php
$conn = mysqli_connect( "localhost", "USR", "PWD", "test" );
 
 $qry =
 "drop table if exists a,b;
 create table a(i int);
 insert into a values(1),(2);
 create table b select * from a where i=1;
 select a.i,b.i from a natural left join b;
 drop tables a,b;";
 
 $qries = explode( ";", $qry );
 for( $i=0; $i<count($qries); $i++ ) {
 $qries[$i] = trim($qries[$i]);
 }
 echo "<b>Processing multi-query...</b><br/>";
 $result = mysqli_multi_query( $conn, $qry );
 echo "<b>mysqli_multi_query</b> returned ",
 ($result ? "True" : "False")."<br/><hr>";
 {
 foreach( $qries as $q ) {
 echo "<b>Query:</b> $q<br/>";
 
 echo "<b>mysqli_store_result returned</b> ";
 $result = mysqli_store_result( $conn );
 $cols = mysqli_field_count( $conn );
 if( is_bool( $result )) {
 $e = mysqli_error( $conn );
 echo ( empty( $e ) ? ( $result ? "True" : "False" ) : $e );
 if( $cols ) echo ". Query failed.";
 echo "<br/>";
 }
 else {
 echo "data<br/>";
 echo "<table border=1>";
 while( $row = mysqli_fetch_row( $result )) {
 echo "<tr>"; foreach( $row as $c ) echo "<td>$c</td>"; echo "</tr>";
 }
 echo "</table>";
 mysqli_free_result( $result );
 }
 
 echo "<b>mysqli_more_results</b> returned ";
 if( mysqli_more_results( $conn )) echo "true<br/>";
 else echo "false<br/>";
 
 echo "<b>mysqli_next_result</b> says ";
 if( mysqli_next_result( $conn ))
 echo "True<br/>";
 else
 echo (( $e = mysqli_error( $conn )) ? $e : "False" ) . "<br/>";
 
 echo "<hr>";
 }
 }
 mysqli_close( $conn );
 ?>
 It produces this output:
 
 Processing multi-query...
 mysqli_multi_query returned True
 
 Query: drop table if exists a,b
 mysqli_store_result returned False
 mysqli_more_results returned true
 mysqli_next_result returned True
 
 Query: create table a(i int)
 mysqli_store_result returned False
 mysqli_more_results returned true
 mysqli_next_result returned True
 
 Query: insert into a values(1),(2)
 mysqli_store_result returned False
 mysqli_more_results returned true
 mysqli_next_result returned True
 
 Query: create table b select * from a where i=1
 mysqli_store_result returned False
 mysqli_more_results returned true
 mysqli_next_result returned True
 
 Query: select a.i,b.i from a natural left join b
 mysqli_store_result returned data
 mysqli_more_results returned true
 mysqli_next_result returned True
 
 Query: drop tables a,b
 mysqli_store_result returned False
 mysqli_more_results returned false
 mysqli_next_result returned False
 
 Query:
 mysqli_store_result returned False
 mysqli_more_results returned false
 mysqli_next_result returned False
 
 
 For a tutorial on multi-queries see http://etutorials.org/Server+Administration/upgrading+php+5/Chapter+3.+MySQL/3.8+Before+and+After+Making+Multiple+Queries/.
 Last updated 19 Aug 2024 |  |