Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Comandos PHP fora de erro de sincronização


Em mysqli::query Se você usar MYSQLI_USE_RESULT todas as chamadas subsequentes retornarão comandos de erro fora de sincronia a menos que você chame mysqli_free_result()

Ao chamar vários procedimentos armazenados, você pode encontrar o seguinte erro:"Comandos fora de sincronia; você não pode executar este comando agora". Isso pode acontecer mesmo ao usar a função close() no objeto de resultado entre as chamadas. Para corrigir o problema, lembre-se de chamar a função next_result() no objeto mysqli após cada chamada de procedimento armazenado. Veja exemplo abaixo:
<?php
// New Connection
$db = new mysqli('localhost','user','pass','database');

// Check for errors
if(mysqli_connect_errno()){
 echo mysqli_connect_error();
}

// 1st Query
$result = $db->query("call getUsers()");
if($result){
     // Cycle through results
    while ($row = $result->fetch_object()){
        $user_arr[] = $row;
    }
    // Free result set
    $result->close();
    $db->next_result();
}

// 2nd Query
$result = $db->query("call getGroups()");
if($result){
     // Cycle through results
    while ($row = $result->fetch_object()){
        $group_arr[] = $row;
    }
     // Free result set
     $result->close();
     $db->next_result();
}
else echo($db->error);

// Close connection
$db->close();
?>

Espero que isso ajude