php/mysql with multiple queries

68,523

Thanks to php.net I've come up with a solution : you have to use (mysqli_multi_query($link, $query)) to run multiple concatenated queries.

 /* create sql connection*/
$link = mysqli_connect("server", "user", "password", "database");

$query = "SQL STATEMENTS;"; /*  first query : Notice the 2 semicolons at the end ! */
$query .= "SQL STATEMENTS;"; /* Notice the dot before = and the 2 semicolons at the end ! */
$query .= "SQL STATEMENTS;"; /* Notice the dot before = and the 2 semicolons at the end ! */
$query .= "SQL STATEMENTS"; /* last query : Notice the dot before = at the end ! */

/* Execute queries */

if (mysqli_multi_query($link, $query)) {
do {
    /* store first result set */
    if ($result = mysqli_store_result($link)) {
        while ($row = mysqli_fetch_array($result)) 

/* print your results */    
{
echo $row['column1'];
echo $row['column2'];
}
mysqli_free_result($result);
}   
} while (mysqli_next_result($link));
}

EDIT - The solution above works if you really want to do one big query but it's also possible to execute as many queries as you wish and execute them separately.

$query1 = "Create temporary table A select c1 from t1"; 
$result1 = mysqli_query($link, $query1) or die(mysqli_error());

$query2 = "select c1 from A"; 
$result2 = mysqli_query($link, $query2) or die(mysqli_error());

while($row = mysqli_fetch_array($result2)) {

echo $row['c1'];
    }  
Share:
68,523
Naim
Author by

Naim

PHP/MySQL enthusiast.

Updated on July 09, 2022

Comments

  • Naim
    Naim almost 2 years
    <?php
    
    $query1 = "CREATE VIEW current_rankings AS SELECT * FROM main_table WHERE date = X";
    
    $query2 = "CREATE VIEW previous_rankings AS SELECT rank FROM main_table WHERE date = date_sub('X', INTERVAL 1 MONTH)";
    
    $query3 = "CREATE VIEW final_output AS SELECT current_rankings.player, current_rankings.rank as current_rank LEFT JOIN previous_rankings.rank as prev_rank
                 ON (current_rankings.player = previous_rankings.player)";
    
    $query4 = "SELECT *, @rank_change = prev_rank - current_rank as rank_change from final_output";
    
    $result = mysql_query($query4) or die(mysql_error()); 
    
    while($row = mysql_fetch_array($result)) {
    echo $row['player']. $row['current_rank']. $row['prev_rank']. $row['rank_change'];
    }
    
    ?>
    

    All the queries work independently but am really struggling putting all the pieces together in one single result so I can use it with mysql_fetch_array.

    I've tried to create views as well as temporary tables but each time it either says table does not exist or return an empty fetch array loop...logic is there but syntax is messed up I think as it's the 1st time I had to deal with multiple queries I need to merge all together. Looking forward to some support. Many thanks.